function find_parent($ar, $id='id', $pid='pid') {
echo '<pre>';
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
//print_r($k);//12345
//print_r($item[$pid]);//01421
if($item[$pid]){
#祖父,自己,父亲,祖父(叔伯?和父亲同级所以不用考虑)
//print_r($t[$item[$pid]]);//$t[1],$t[4],$t[2],$t[1]
if(!isset($t[$item[$pid]]['parent'][$item[$pid]])){
$t[$item[$id]]['parent'][$item[$pid]]=$t[$item[$pid]]; #注意
}
}
}
//print_r($t);
//return $t;
}
function find_child($ar, $id='id', $pid='pid') {
echo '<pre>';
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
//print_r($k);//12345
//print_r($item[$pid]);//01421
if($item[$pid]) {//1421
$t[$item[$pid]]['child'][$item[$id]]=$t[$item[$id]]; #注意
}
}
print_r($t);
//return $t;
}
$data = array(
array('id'=>1, 'pid'=>0, 'NAME'=>'祖父'),
array('id'=>2, 'pid'=>1, 'NAME'=>'父亲'),
array('id'=>3, 'pid'=>4, 'NAME'=>'儿子'),
array('id'=>4, 'pid'=>2, 'NAME'=>'自己'),
array('id'=>5, 'pid'=>1, 'NAME'=>'叔伯'),
);
$p = find_parent($data);
$c = find_child($data);
echo '<pre>';
$c;
//print_r($p);
//print_r($c);
找父级的结果:
Array
(
[1] => Array
(
[id] => 1
[pid] => 0
[NAME] => 祖父
)
[2] => Array
(
[id] => 2
[pid] => 1
[NAME] => 父亲
[parent] => Array
(
[1] => Array
(
[id] => 1
[pid] => 0
[NAME] => 祖父
)
)
)
[3] => Array
(
[id] => 3
[pid] => 4
[NAME] => 儿子
[parent] => Array
(
[4] => Array
(
[id] => 4
[pid] => 2
[NAME] => 自己
)
)
)
[4] => Array
(
[id] => 4
[pid] => 2
[NAME] => 自己
[parent] => Array
(
[2] => Array
(
[id] => 2
[pid] => 1
[NAME] => 父亲
[parent] => Array
(
[1] => Array
(
[id] => 1
[pid] => 0
[NAME] => 祖父
)
)
)
)
)
[5] => Array
(
[id] => 5
[pid] => 1
[NAME] => 叔伯
[parent] => Array
(
[1] => Array
(
[id] => 1
[pid] => 0
[NAME] => 祖父
)
)
)
)
找子级的结果:
Array
(
[1] => Array
(
[id] => 1
[pid] => 0
[NAME] => 祖父
[child] => Array
(
[2] => Array
(
[id] => 2
[pid] => 1
[NAME] => 父亲
)
[5] => Array
(
[id] => 5
[pid] => 1
[NAME] => 叔伯
)
)
)
[2] => Array
(
[id] => 2
[pid] => 1
[NAME] => 父亲
[child] => Array
(
[4] => Array
(
[id] => 4
[pid] => 2
[NAME] => 自己
[child] => Array
(
[3] => Array
(
[id] => 3
[pid] => 4
[NAME] => 儿子
)
)
)
)
)
[3] => Array
(
[id] => 3
[pid] => 4
[NAME] => 儿子
)
[4] => Array
(
[id] => 4
[pid] => 2
[NAME] => 自己
[child] => Array
(
[3] => Array
(
[id] => 3
[pid] => 4
[NAME] => 儿子
)
)
)
[5] => Array
(
[id] => 5
[pid] => 1
[NAME] => 叔伯
)
)