Array
(
    [1] => Array
        (
            [cat_id] => 1
            [pid] => 0
            [name] => 中国
            [cid] => Array
                (
                    [4] => Array
                        (
                            [cat_id] => 4
                            [pid] => 1
                            [name] => 北京
                        )                    [5] => Array
                        (
                            [cat_id] => 5
                            [pid] => 1
                            [name] => 上海
                        )                    [6] => Array
                        (
                            [cat_id] => 6
                            [pid] => 1
                            [name] => 广西
                            [cid] => Array
                                (
                                    [7] => Array
                                        (
                                            [cat_id] => 7
                                            [pid] => 6
                                            [name] => 桂林
                                        )                                    [8] => Array
                                        (
                                            [cat_id] => 8
                                            [pid] => 6
                                            [name] => 南宁
                                        )                                    [9] => Array
                                        (
                                            [cat_id] => 9
                                            [pid] => 6
                                            [name] => 柳州
                                        )                                )                        )                )        )    [2] => Array
        (
            [cat_id] => 2
            [pid] => 0
            [name] => 美国
            [cid] => Array
                (
                    [10] => Array
                        (
                            [cat_id] => 10
                            [pid] => 2
                            [name] => 纽约
                        )                    [11] => Array
                        (
                            [cat_id] => 11
                            [pid] => 2
                            [name] => 华盛顿
                        )                )        )    [3] => Array
        (
            [cat_id] => 3
            [pid] => 0
            [name] => 韩国
            [cid] => Array
                (
                    [12] => Array
                        (
                            [cat_id] => 12
                            [pid] => 3
                            [name] => 首尔
                        )                )        ))需要写一个通用方法,获取第一级,第二级,第三级等等数据

解决方案 »

  1.   

    这是原函数文件<?php
    //测试数据
    $data[]=array('cat_id'=>1,'pid'=>0,'name'=>'中国');
    $data[]=array('cat_id'=>2,'pid'=>0,'name'=>'美国');
    $data[]=array('cat_id'=>3,'pid'=>0,'name'=>'韩国');
    $data[]=array('cat_id'=>4,'pid'=>1,'name'=>'北京');
    $data[]=array('cat_id'=>5,'pid'=>1,'name'=>'上海');
    $data[]=array('cat_id'=>6,'pid'=>1,'name'=>'广西');
    $data[]=array('cat_id'=>7,'pid'=>6,'name'=>'桂林');
    $data[]=array('cat_id'=>8,'pid'=>6,'name'=>'南宁');
    $data[]=array('cat_id'=>9,'pid'=>6,'name'=>'柳州');
    $data[]=array('cat_id'=>10,'pid'=>2,'name'=>'纽约');
    $data[]=array('cat_id'=>11,'pid'=>2,'name'=>'华盛顿');
    $data[]=array('cat_id'=>12,'pid'=>3,'name'=>'首尔');    function categoryFun($data=array(),$id=0){
            $length=count($data);
            $format=array();
            if($length==0){
                return false;
            }
            for($i=0;$i<$length;$i++){
                if($data[$i]['pid']==$id){
                    $format[$id][$data[$i]['cat_id']]=$data[$i];
                    if($result=categoryFun($data,$data[$i]['cat_id'])){
                        $format[$id][$data[$i]['cat_id']]['cid']=$result;
                    }
                }
            }
            if(!empty($format[$id])){
                return $format[$id];
            }
        }
        $s=categoryFun($data);
        print_r($s);?>
      

  2.   

    前面那段代码被过滤,如查看,可讲上面代码复制到php编辑器,运行查看,单击查看源码这是html浏览器显示代码
    Array ( [1] => Array ( [cat_id] => 1 [pid] => 0 [name] => 中国 [cid] => Array ( [4] => Array ( [cat_id] => 4 [pid] => 1 [name] => 北京 ) [5] => Array ( [cat_id] => 5 [pid] => 1 [name] => 上海 ) [6] => Array ( [cat_id] => 6 [pid] => 1 [name] => 广西 [cid] => Array ( [7] => Array ( [cat_id] => 7 [pid] => 6 [name] => 桂林 ) [8] => Array ( [cat_id] => 8 [pid] => 6 [name] => 南宁 ) [9] => Array ( [cat_id] => 9 [pid] => 6 [name] => 柳州 ) ) ) ) ) [2] => Array ( [cat_id] => 2 [pid] => 0 [name] => 美国 [cid] => Array ( [10] => Array ( [cat_id] => 10 [pid] => 2 [name] => 纽约 ) [11] => Array ( [cat_id] => 11 [pid] => 2 [name] => 华盛顿 ) ) ) [3] => Array ( [cat_id] => 3 [pid] => 0 [name] => 韩国 [cid] => Array ( [12] => Array ( [cat_id] => 12 [pid] => 3 [name] => 首尔 ) ) ) ) 
      

  3.   

    你没有说清楚需求是什么,不知是否是这样的结果
    Array
    (
        [1] => Array
            (
                [cat_id] => 1
                [pid] => 0
                [name] => 中国
                [child] => Array
                    (
                        [4] => Array
                            (
                                [cat_id] => 4
                                [pid] => 1
                                [name] => 北京
                            )                    [5] => Array
                            (
                                [cat_id] => 5
                                [pid] => 1
                                [name] => 上海
                            )                    [6] => Array
                            (
                                [cat_id] => 6
                                [pid] => 1
                                [name] => 广西
                                [child] => Array
                                    (
                                        [7] => Array
                                            (
                                                [cat_id] => 7
                                                [pid] => 6
                                                [name] => 桂林
                                            )                                    [8] => Array
                                            (
                                                [cat_id] => 8
                                                [pid] => 6
                                                [name] => 南宁
                                            )                                    [9] => Array
                                            (
                                                [cat_id] => 9
                                                [pid] => 6
                                                [name] => 柳州
                                            )                                )                        )                )        )    [2] => Array
            (
                [cat_id] => 2
                [pid] => 0
                [name] => 美国
                [child] => Array
                    (
                        [10] => Array
                            (
                                [cat_id] => 10
                                [pid] => 2
                                [name] => 纽约
                            )                    [11] => Array
                            (
                                [cat_id] => 11
                                [pid] => 2
                                [name] => 华盛顿
                            )                )        )    [3] => Array
            (
                [cat_id] => 3
                [pid] => 0
                [name] => 韩国
                [child] => Array
                    (
                        [12] => Array
                            (
                                [cat_id] => 12
                                [pid] => 3
                                [name] => 首尔
                            )                )        )    [4] => Array
            (
                [cat_id] => 4
                [pid] => 1
                [name] => 北京
            )    [5] => Array
            (
                [cat_id] => 5
                [pid] => 1
                [name] => 上海
            )    [6] => Array
            (
                [cat_id] => 6
                [pid] => 1
                [name] => 广西
                [child] => Array
                    (
                        [7] => Array
                            (
                                [cat_id] => 7
                                [pid] => 6
                                [name] => 桂林
                            )                    [8] => Array
                            (
                                [cat_id] => 8
                                [pid] => 6
                                [name] => 南宁
                            )                    [9] => Array
                            (
                                [cat_id] => 9
                                [pid] => 6
                                [name] => 柳州
                            )                )        )    [7] => Array
            (
                [cat_id] => 7
                [pid] => 6
                [name] => 桂林
            )    [8] => Array
            (
                [cat_id] => 8
                [pid] => 6
                [name] => 南宁
            )    [9] => Array
            (
                [cat_id] => 9
                [pid] => 6
                [name] => 柳州
            )    [10] => Array
            (
                [cat_id] => 10
                [pid] => 2
                [name] => 纽约
            )    [11] => Array
            (
                [cat_id] => 11
                [pid] => 2
                [name] => 华盛顿
            )    [12] => Array
            (
                [cat_id] => 12
                [pid] => 3
                [name] => 首尔
            ))
      

  4.   

    如果你要做下拉列表或树的话,也可以这样:$data[]=array('cat_id'=>1,'pid'=>0,'name'=>'中国');
    $data[]=array('cat_id'=>2,'pid'=>0,'name'=>'美国');
    $data[]=array('cat_id'=>3,'pid'=>0,'name'=>'韩国');
    $data[]=array('cat_id'=>4,'pid'=>1,'name'=>'北京');
    $data[]=array('cat_id'=>5,'pid'=>1,'name'=>'上海');
    $data[]=array('cat_id'=>6,'pid'=>1,'name'=>'广西');
    $data[]=array('cat_id'=>7,'pid'=>6,'name'=>'桂林');
    $data[]=array('cat_id'=>8,'pid'=>6,'name'=>'南宁');
    $data[]=array('cat_id'=>9,'pid'=>6,'name'=>'柳州');
    $data[]=array('cat_id'=>10,'pid'=>2,'name'=>'纽约');
    $data[]=array('cat_id'=>11,'pid'=>2,'name'=>'华盛顿');
    $data[]=array('cat_id'=>12,'pid'=>3,'name'=>'首尔');
    $ret = array();
    foreach($data as $item){
      $ret[$item['pid']][] = $item;
    }
    var_dump($ret);
      

  5.   


    这个是通过我写的那个函数完成的,我需要结果是这样栏目a<ul>
    <li>a1</li>
    <li>a2<ul><li>a11</li></ul></li>
    <li>a3></li>
      

  6.   

    ...
    $s = categoryFun($data);function foo($r) {
      foreach($r as $v) {
        echo "<li>$v[name]</li>";
        if($v['cid']) {
          echo '<ul>';
          foo($v['cid']);
          echo '</ul>';
        }
      }
    }foo($s);
      

  7.   

    搞定了,其实不难<?php
        //栏目分类类
        class categoryFun{
            private $data=array();
            private $id;
            private $field=array();
            private $str='';
            
            function __construct($data=array(),$id=0,$field=array()){
                if(empty($data))return false;
                $this->data=$data;
                $this->id=$id;
    $this->field['sid']=isset($field['0'])?$field['0']:'sid';
    $this->field['pid']=isset($field['1'])?$field['1']:'pid';
    $this->field['name']=isset($field['2'])?$field['2']:'name';
            }
            
            //生成多维数组
            private function fun($id=null){
                $sid=$this->field['sid'];
                $pid=$this->field['pid'];
                $name=$this->field['name'];
                if($id==null)$id=$this->id;
                $data=$this->data;
                $length=count($data);
                $format=array();
                if($length==0){
                    return false;
                }
                for($i=0;$i<$length;$i++){
                    if($data[$i][$pid]==$id){
                        $format[$id][$data[$i][$sid]]=$data[$i];
                        if($result=$this->fun($data[$i][$sid])){
                            $format[$id][$data[$i][$sid]]['cid']=$result;
                        }
                    }
                }
                if(!empty($format[$id])){
                    return $format[$id];
                }
            }
            //解析多维数组
            public function display($data=null,$id=null){
                $str=$this->str;
                $sid=$this->field['sid'];
                $pid=$this->field['pid'];
                $name=$this->field['name'];
                if($data==null)$data=$this->fun();
                if($id==null)$id=$this->id;
                if(!is_array($data)){return false;}
                $str.="<ul>\n";
                foreach($data as $s){
                    if($s[$pid]==$id){
                        $str.="<li>".$s[$name];
                        if(isset($s['cid'])){
                            $str.=self::display($s['cid'],$s[$sid]);
                        }
                        $str.="</li>";
                    }
                }
                $str.="</ul>\n";
                return $str;
            }
        }
         //测试数据
    $data[]=array('cat_id'=>1,'pid'=>0,'name'=>'中国');
    $data[]=array('cat_id'=>2,'pid'=>0,'name'=>'美国');
    $data[]=array('cat_id'=>3,'pid'=>0,'name'=>'韩国');
    $data[]=array('cat_id'=>4,'pid'=>1,'name'=>'北京');
    $data[]=array('cat_id'=>5,'pid'=>1,'name'=>'上海');
    $data[]=array('cat_id'=>6,'pid'=>1,'name'=>'广西');
    $data[]=array('cat_id'=>7,'pid'=>6,'name'=>'桂林');
    $data[]=array('cat_id'=>8,'pid'=>6,'name'=>'南宁');
    $data[]=array('cat_id'=>9,'pid'=>6,'name'=>'柳州');
    $data[]=array('cat_id'=>10,'pid'=>2,'name'=>'纽约');
    $data[]=array('cat_id'=>11,'pid'=>2,'name'=>'华盛顿');
    $data[]=array('cat_id'=>12,'pid'=>3,'name'=>'首尔');
        $s=new categoryFun($data,0,array('cat_id','pid','name'));
        echo $s->display();
        
     
    ?>