解决无限级分类的这种结构数据;
原始数据:从数据库获取$ar;
整理后的数据:reSort($ar);
字段:id(分类id,下面用i表示)、pid(父分类id,下面用pi表示)、name(分类名称,下面用n表示)
注意:从数据库获取的数据必须以id作为key,如$ar;
方法如下:
<?php
$ar = array(
1 => array(
'i' => '1','pi'=>0,'n'=>'01',
),
3 => array(
'i' => '3','pi'=>0,'n'=>'03',
),
2 => array(
'i' => '2','pi'=>1,'n'=>'12',
),
5 => array(
'i' => '5','pi'=>1,'n'=>'15',
),
4 => array(
'i' => '4','pi'=>1,'n'=>'14',
),
6 => array(
'i' => '6','pi'=>2,'n'=>'26',
),
);
/**
* 获取$ar[$i]的整个父级关系
*/
function getTip($ar, $i, $a=array()){
$pi = $ar[$i]['pi'];
$a[] = $pi;
if($pi != 0){
$i = $pi;
return getTip($ar, $i, $a);
}else{
return $a;
}
}
/**
* 对$ar进行树形排序
*/
function reSort($ar){
$r = array();
foreach ($ar as $t){
$i = $t['i'];
$tip = getTip($ar, $i);
$length = count($tip)-1;
$k = '$r';
for ($j=$length; $j>=0; $j--){
$k .= '['.$tip[$j].']';
}
$k .= '['.$i.']=$ar["$i"];';
eval($k);
}
return $r;
}
print_r(reSort($ar));
die;
返回的结果如下:
Array
(
[0] => Array
(
[1] => Array
(
[i] => 1
[pi] => 0
[n] => 01
[2] => Array
(
[i] => 2
[pi] => 1
[n] => 12
[6] => Array
(
[i] => 6
[pi] => 2
[n] => 26
)
)
[5] => Array
(
[i] => 5
[pi] => 1
[n] => 15
)
[4] => Array
(
[i] => 4
[pi] => 1
[n] => 14
)
)
[3] => Array
(
[i] => 3
[pi] => 0
[n] => 03
)
)
)