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] => 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] => 首尔
) ) ))需要写一个通用方法,获取第一级,第二级,第三级等等数据
//测试数据
$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);?>
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] => 首尔 ) ) ) )
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] => 首尔
))
$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);
这个是通过我写的那个函数完成的,我需要结果是这样栏目a<ul>
<li>a1</li>
<li>a2<ul><li>a11</li></ul></li>
<li>a3></li>
$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);
//栏目分类类
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();
?>