呵呵,这本来就是我发布代码时的测试数据。
好吧,再发一次吧!<?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);
?>

解决方案 »

  1.   

    继续问xuzuning(唠叨) 大哥我怎么样才能输出指定pid的树行结构,现在只输出了整个数组的树性结构.
    依然是这个数组
    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
                    (
                    )        ))