PHP-无限级分类(迭代法创建)


$area = array( array('id'=>1,'name'=>'安徽','parent'=>0), array('id'=>2,'name'=>'海淀','parent'=>7), array('id'=>3,'name'=>'濉溪县','parent'=>5), array('id'=>4,'name'=>'昌平','parent'=>7), array('id'=>5,'name'=>'淮北','parent'=>1), array('id'=>6,'name'=>'朝阳','parent'=>7), array('id'=>7,'name'=>'北京','parent'=>0), array('id'=>8,'name'=>'上地','parent'=>2) );

#找父栏目、父父栏目#

function parenttree($arr,$id){
            $par_arr = array();
            //var_dump($id);
            while($id !== 0){//外层循环的作用:0表示最顶层的栏目 等于0就表示无父栏目/父父栏目 只要不等于0就表示有上级目录 则循环
             foreach($arr as $v){//内层循环的作用:遍历数组查找出来$id对应的值  若找到了  该值就是它自身(第一次就是它自己)和父栏目/父父栏目..然后存入数组并终止循环(break)
                   if($v['id'] == $id){
                       $par_arr[] = $v;
                       $id = $v['parent'];
                       break;
                   }
             }             
            }
            return $par_arr;
}

#找子孙栏目#

function subtree($arr,$parent=0){
        $task = array($parent);//创建任务表
        $subs = array();//存子孙栏目的数组
        while(!empty($task))//如果任务表不为空 就表示要做任务
        {
            $flag = false;//默认没找到子树
            foreach($arr as $k=>$v){
                 if($v['parent'] == $parent){
                        $subs [] = $v;
                        array_push($task,$v['id']);//借助栈 把新的地区的id压入栈
                        $parent = $v['id'];
                        unset($arr[$k]);//把找到的单元unset掉
                        $flag = true;
                 }
            }
            if(!$flag){//表示没找到子树
                array_pop($task);
                $parent = end($task);
                
            }
            /*echo '<pre>';
            print_r($task);
            echo '</pre>';*/
        }
        return $subs;
}
原文地址:https://www.cnblogs.com/YangJieCheng/p/5693566.html