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

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

WBOY
Freigeben: 2016-06-23 14:01:30
Original
830 Leute haben es durchsucht

下面是一个无限分类的代码,想请问一下类中函数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;    }}?>
Nach dem Login kopieren


回复讨论(解决方案)

$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);
Nach dem Login kopieren
Nach dem Login kopieren

$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);
Nach dem Login kopieren
Nach dem Login kopieren



这个我知道,请问一下, $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);
Nach dem Login kopieren



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

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

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

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

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage