呵呵,这本来就是我发布代码时的测试数据。
好吧,再发一次吧!<?php
//测试数据
$ar = array(
array(id=>1,pid=>0),
array(id=>2,pid=>0),
array(id=>3,pid=>2),
array(id=>4,pid=>0),
array(id=>5,pid=>3),
array(id=>6,pid=>1),
array(id=>7,pid=>1),
array(id=>8,pid=>6),
array(id=>9,pid=>7),
array(id=>10,pid=>9)
);//排序函数
function cmd($a,$b) {
if($a[pid]==$b[pid]) return 0;
return $a[pid]>$b[pid]?1:-1;
}//排序,为避免数据中父节点在子节点后面出现,这种情况在多次修改数据后经常会发生的
//排序的目的就是防止这种情况造成的混乱
uasort($ar,cmd);//定义目标数组
$d = array();
//定义索引数组,用于记录节点在目标数组的位置
$ind = array();foreach($ar as $v) {
$v[child] = array(); //给每个节点附加一个child项
if($v[pid] == 0) {
$i = count($d);
$d[$i] = $v;
$ind[$v[id]] =& $d[$i];
}else {
$i = count($ind[$v[pid]][child]);
$ind[$v[pid]][child][$i] = $v;
$ind[$v[id]] =& $ind[$v[pid]][child][$i];
}
}
//检查结果
print_r($d);
?>
好吧,再发一次吧!<?php
//测试数据
$ar = array(
array(id=>1,pid=>0),
array(id=>2,pid=>0),
array(id=>3,pid=>2),
array(id=>4,pid=>0),
array(id=>5,pid=>3),
array(id=>6,pid=>1),
array(id=>7,pid=>1),
array(id=>8,pid=>6),
array(id=>9,pid=>7),
array(id=>10,pid=>9)
);//排序函数
function cmd($a,$b) {
if($a[pid]==$b[pid]) return 0;
return $a[pid]>$b[pid]?1:-1;
}//排序,为避免数据中父节点在子节点后面出现,这种情况在多次修改数据后经常会发生的
//排序的目的就是防止这种情况造成的混乱
uasort($ar,cmd);//定义目标数组
$d = array();
//定义索引数组,用于记录节点在目标数组的位置
$ind = array();foreach($ar as $v) {
$v[child] = array(); //给每个节点附加一个child项
if($v[pid] == 0) {
$i = count($d);
$d[$i] = $v;
$ind[$v[id]] =& $d[$i];
}else {
$i = count($ind[$v[pid]][child]);
$ind[$v[pid]][child][$i] = $v;
$ind[$v[id]] =& $ind[$v[pid]][child][$i];
}
}
//检查结果
print_r($d);
?>
依然是这个数组
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[child] => Array
(
[0] => Array
(
[id] => 7
[pid] => 1
[child] => Array
(
[0] => Array
(
[id] => 9
[pid] => 7
[child] => Array
(
[0] => Array
(
[id] => 10
[pid] => 9
[child] => Array
(
) ) ) ) ) ) [1] => Array
(
[id] => 6
[pid] => 1
[child] => Array
(
[0] => Array
(
[id] => 8
[pid] => 6
[child] => Array
(
) ) ) ) ) ) [1] => Array
(
[id] => 2
[pid] => 0
[child] => Array
(
[0] => Array
(
[id] => 3
[pid] => 2
[child] => Array
(
[0] => Array
(
[id] => 5
[pid] => 3
[child] => Array
(
) ) ) ) ) ) [2] => Array
(
[id] => 4
[pid] => 0
[child] => Array
(
) ))