使用迭代的方法查找子孙树,但是建议使用递归来查找子孙树。
<?php
/**
利用迭代法查找子孙树
****/
$area = array(
array('id'=>1, 'name'=>'安徽', 'parent'=>0),
array('id'=>2, 'name'=>'海淀', 'parent'=>7),
array('id'=>3, 'name'=>'长治', 'parent'=>8),
array('id'=>4, 'name'=>'昌平', 'parent'=>7),
array('id'=>5, 'name'=>'县市1', 'parent'=>3),
array('id'=>6, 'name'=>'太原', 'parent'=>8),
array('id'=>7, 'name'=>'北京', 'parent'=>0),
array('id'=>8, 'name'=>'山西', 'parent'=>0),
array('id'=>9, 'name'=>'县市2', 'parent'=>3),
array('id'=>10, 'name'=>'小康村', 'parent'=>5),
);
function subtree($arr, $parent=0){
$task = array($parent); //任务表
$tree = array();//地区表
while (!empty($task)) {
$flag = false;
foreach ($arr as $k => $v) {
if ($v['parent'] == $parent) {
$tree[] = $v;
array_push($task, $v['id']); //把最新的地区id入栈
$parent = $v['id'];
unset($arr[$k]); //把找到的单元unset
$flag = true; //说明找到了子栏目
}
}
if ($flag == false) {
array_pop($task);
$parent = end($task);
}
print_r($task);
}
return $tree;
}
print_r(subtree($area,0));