无限级分类之迭代查找子孙树

使用迭代的方法查找子孙树,但是建议使用递归来查找子孙树。

<?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));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值