php递归和迭代的区别

<?php
$arr=array(
array('id'=>1,'name'=>'河南省','pid'=>0),
array('id'=>2,'name'=>'信阳市','pid'=>1),
array('id'=>3,'name'=>'开封市','pid'=>1),
array('id'=>6,'name'=>'广州市','pid'=>4),
array('id'=>4,'name'=>'广东省','pid'=>0),
array('id'=>5,'name'=>'深圳市','pid'=>4),
);
function digui($data,$pid=0)
{
	$arr=array();
	foreach($data as $v){
		if($v['pid']==$pid){
			$arr[]=$v;
            $arr=array_merge($arr,digui($data,$v['id']));
		}
	}
	return $arr;
}
function  diedai($data,$id=0)
{
     $task=array($id);//任务表此时放进的$id是为了找儿子,然后再儿子中找孙子,
     $tree=array();//地区表
    while(!empty($task))
	{
        $flag=false;
        foreach($data as $k=>$v)
		{
            if($v['pid']==$id)
			{
                $tree[]=$v;//把找到的项放进$tree数组
                array_push($task,$v['id']);//每次把找到的儿子的id加进来
                $id=$v['id'];//每次把$id设成刚加进来的一项的id
                unset($data[$k]);//把找到的项删除,此处类似排除法
                $flag=true;//执行这一步说明上面的$id找到儿子了,如果为false说明这一if语句根本没执行同时说明最后
                //的$id没儿子,然后执行下面的if语句,把$id设为倒数第二项
            }
        }
        if($flag==false)
		{//当执行这一步时 说明上一步的foreach没执行也就是说明$task最后一项没找到孩子
            array_pop($task);//删除最后一项
            $id=end($task);//把$id设为倒数第二项,放到上面的foreach里去执行,找倒数第二项的儿子
        }

    }
	return $tree;
}
var_dump(diedai($arr));
?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值