无限级分类之递归查找家谱树

该代码为利用递归查找家谱树,但是建议使用迭代查找效果会更好。

<?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 familyTree($arr, $id, $lev=1){ //$lev 可以没有的
	//static $tree = array();
	$tree = array();

	foreach ($arr as $v) {
		if ($v['id'] == $id) {  //先把自己找到,然后写进去,随后利用递归把父类写进去
		 	$v['lev'] = $lev;
		 	//$tree[] = $v;
		
			if ($v['parent']>0) {
			 //	familyTree($arr, $v['parent']);
			 //	array_push($tree, familyTree($arr, $v['parent']));  //由于显示结果是数组嵌套数组,不好看,所以不用
				$tree = array_merge($tree, familyTree($arr, $v['parent'], $lev+1));
			}
			$tree[] = $v; //和29行换个位置,就先递后归了
		} 
	}
	return $tree;
}

print_r(familyTree($area, 10));


//$tree = familyTree($area, 10, 1);

// foreach ($tree as $v) {
// 	echo str_repeat('  ', $v['lev']).$v['name'].'<br />';
// }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值