天天看点

创建树形数组

header("content-type:text/html;charset=utf-8");
$categories = array(
    array('id'=>1,'name'=>'电脑','pid'=>0),
    array('id'=>2,'name'=>'手机','pid'=>0),
    array('id'=>3,'name'=>'笔记本','pid'=>1),
    array('id'=>4,'name'=>'台式机','pid'=>1),
    array('id'=>5,'name'=>'智能机','pid'=>2),
    array('id'=>6,'name'=>'功能机','pid'=>2),
    array('id'=>7,'name'=>'超级本','pid'=>3),
    array('id'=>8,'name'=>'游戏本','pid'=>3),
    array('id'=>9,'name'=>'m3游戏本','pid'=>8),

);


//用于生成树形数组
function category($arr,$pid=0,$level=0){
    //定义一个静态变量,存储一个空数组,用静态变量,是因为静态变量不会被销毁,会保存之前保留的值,普通变量在函数结束时,会死亡,生长周期函数开始到函数结束,再次调用重新开始生长
    //保存一个空数组
    static $list=array();
    //通过遍历查找是否属于顶级父类,pid=0为顶级父类,
    foreach($arr as $key => $value){
        //进行判断如果pid=0,那么为顶级父类,放入定义的空数组里
        if($value['pid']==$pid){
            //添加空格进行分层
            $arr['level']=$level;

            $flg = str_repeat('000',$level);
            $value['name'] = $flg.$value['name'];

            $list[]=$value;
            unset($arr[$key]);
            //递归点,调用自身,把顶级父类的主键id作为父类进行再调用循环,空格+1
            category($arr,$value['id'],$level+1);
        }
    }
    return $list;//递归出口
}
echo "<pre>";
print_r(category($categories));