Home > Backend Development > PHP Tutorial > 求教无限分类的当前位置怎么写,顶者有分!

求教无限分类的当前位置怎么写,顶者有分!

WBOY
Release: 2016-06-23 14:01:30
Original
830 people have browsed it

下面是一个无限分类的代码,想请问一下类中函数get_pos的使用方法,谢谢!!!

<?php/** +------------------------------------------------ * 通用的树型类 +------------------------------------------------ * @author yangyunzhou@foxmail.com +------------------------------------------------ * @date 2010年11月23日10:09:31 +------------------------------------------------ */class Tree{     /**     +------------------------------------------------     * 生成树型结构所需要的2维数组     +------------------------------------------------     * @author yangyunzhou@foxmail.com     +------------------------------------------------     * @var Array     */    var $arr = array();     /**     +------------------------------------------------     * 生成树型结构所需修饰符号,可以换成图片     +------------------------------------------------     * @author yangyunzhou@foxmail.com     +------------------------------------------------     * @var Array     */    var $icon = array('分隔','分隔一','分隔二');     /**    * @access private    */    var $ret = '';     /**    * 构造函数,初始化类    * @param array 2维数组,例如:    * array(    *      1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),    *      2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),    *      3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),    *      4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),    *      5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),    *      6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),    *      7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')    *      )    */    function tree($arr=array())    {       $this->arr = $arr;       $this->ret = '';       return is_array($arr);    }     /**    * 得到父级数组    * @param int    * @return array    */    function get_parent($myid)    {        $newarr = array();        if(!isset($this->arr[$myid])) return false;        $pid = $this->arr[$myid]['parentid'];        $pid = $this->arr[$pid]['parentid'];        if(is_array($this->arr))        {            foreach($this->arr as $id => $a)            {                if($a['parentid'] == $pid) $newarr[$id] = $a;            }        }        return $newarr;    }     /**    * 得到子级数组    * @param int    * @return array    */    function get_child($myid)    {        $a = $newarr = array();        if(is_array($this->arr))        {            foreach($this->arr as $id => $a)            {                if($a['parentid'] == $myid) $newarr[$id] = $a;            }        }        return $newarr ? $newarr : false;    }     /**    * 得到当前位置数组    * @param int    * @return array    */    function get_pos($myid,&$newarr)    {        $a = array();        if(!isset($this->arr[$myid])) return false;        $newarr[] = $this->arr[$myid];        $pid = $this->arr[$myid]['parentid'];        if(isset($this->arr[$pid]))        {            $this->get_pos($pid,$newarr);        }        if(is_array($newarr))        {            krsort($newarr);            foreach($newarr as $v)            {                $a[$v['id']] = $v;            }        }        return $a;    }     /**     * -------------------------------------     *  得到树型结构     * -------------------------------------     * @author yangyunzhou@foxmail.com     * @param $myid 表示获得这个ID下的所有子级     * @param $str 生成树形结构基本代码, 例如: "<option value=\$id \$select>\$spacer\$name</option>"     * @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到     * @param $adds     * @param $str_group     */    function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')    {        $number=1;        $child = $this->get_child($myid);        if(is_array($child)) {            $total = count($child);            foreach($child as $id=>$a) {                $j=$k='';                if($number==$total) {                    $j .= $this->icon[2];                } else {                    $j .= $this->icon[1];                    $k = $adds ? $this->icon[0] : '';                }                $spacer = $adds ? $adds.$j : '';                $selected = $id==$sid ? 'selected' : '';                @extract($a);                $parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");                $this->ret .= $nstr;                $this->get_tree($id, $str, $sid, $adds.$k.' ',$str_group);                $number++;            }        }        return $this->ret;    }     /**    * 同上一方法类似,但允许多选    */    function get_tree_multi($myid, $str, $sid = 0, $adds = '')    {        $number=1;        $child = $this->get_child($myid);        if(is_array($child))        {            $total = count($child);            foreach($child as $id=>$a)            {                $j=$k='';                if($number==$total)                {                    $j .= $this->icon[2];                }                else                {                    $j .= $this->icon[1];                    $k = $adds ? $this->icon[0] : '';                }                $spacer = $adds ? $adds.$j : '';                 $selected = $this->have($sid,$id) ? 'selected' : '';                @extract($a);                eval("\$nstr = \"$str\";");                $this->ret .= $nstr;                $this->get_tree_multi($id, $str, $sid, $adds.$k.' ');                $number++;            }        }        return $this->ret;    }     function have($list,$item){        return(strpos(',,'.$list.',',','.$item.','));    }     /**     +------------------------------------------------     * 格式化数组     +------------------------------------------------     * @author yangyunzhou@foxmail.com     +------------------------------------------------     */    function getArray($myid=0, $sid=0, $adds='')    {        $number=1;        $child = $this->get_child($myid);        if(is_array($child)) {            $total = count($child);            foreach($child as $id=>$a) {                $j=$k='';                if($number==$total) {                    $j .= $this->icon[2];                } else {                    $j .= $this->icon[1];                    $k = $adds ? $this->icon[0] : '';                }                $spacer = $adds ? $adds.$j : '';                @extract($a);                $a['name'] = $spacer.' '.$a['name'];                $this->ret[$a['id']] = $a;                $fd = $adds.$k.' ';                $this->getArray($id, $sid, $fd);                $number++;            }        }         return $this->ret;    }}?>
Copy after login


回复讨论(解决方案)

$arr = array(          1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),          2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),          3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),          4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),          5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),          6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),          7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')          ); $tree = new Tree($arr); $tree->get_pos($myid,$newarr);
Copy after login
Copy after login

$arr = array(          1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),          2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),          3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),          4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),          5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),          6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),          7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')          ); $tree = new Tree($arr); $tree->get_pos($myid,$newarr);
Copy after login
Copy after login



这个我知道,请问一下, $tree->get_pos($myid,$newarr);时,$newarr的值是什么呢?

你自己定义的一个数组

你自己定义的一个数组

我现在就是想知道这个数组是个什么值


你自己定义的一个数组

我现在就是想知道这个数组是个什么值

$arr = array(          1 => array('id'=>'1'),          2 => array('id'=>'2'),          3 => array('id'=>'3'),          4 => array('id'=>'4'),          5 => array('id'=>'5'),          6 => array('id'=>'6'),          7 => array('id'=>'7')          ); $tree = new Tree($arr); $pos = $tree->get_pos('3',$arr); var_dump($pos);
Copy after login



这个函数就是把某个数组的某个位置放在第一然后倒序

function get_pos($myid,&$newarr)
应写作
function get_pos($myid,&$newarr=array())

即不需要显式的传递数组
$newarr 只是递归时的工作参数

get_pos 的作用是产生“棉花糖”数据
即从根节点到当前节点的路径
用于打印
CSDN > CSDN论坛 > PHP > 基础编程
这样的内容

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template