首頁 > 後端開發 > php教程 > 求教无限分类的当前位置怎么写,顶者有分!

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

WBOY
發布: 2016-06-23 14:01:30
原創
827 人瀏覽過

下面是一个无限分类的代码,想请问一下类中函数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;    }}?>
登入後複製


回复讨论(解决方案)

$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);
登入後複製
登入後複製

$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);
登入後複製
登入後複製



这个我知道,请问一下, $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);
登入後複製



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

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

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

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板