php 递归与迭代区别

<?php
//递归
$arr=array(
array('id'=>1,'name'=>'河南省','pid'=>0),
array('id'=>2,'name'=>'许昌','pid'=>1),
array('id'=>3,'name'=>'信阳','pid'=>1),
array('id'=>4,'name'=>'邯郸','pid'=>5),
array('id'=>5,'name'=>'河北省','pid'=>0),
array('id'=>6,'name'=>'石家庄','pid'=>5)
);
function getAll($arr,$id=0)
{
$sub=array();
foreach($arr as $k=>$v)
{
if($v['pid']==$id)
{
$sub[]=$v['name'];
$sub=array_merge($sub,getAll($arr,$v['id']));
}
}
return $sub;


}
//迭代
function iterator($arr,$pid=0)
{
$task=array($pid);
$tree=array();
while(!empty($task))
{
$flag=false;
foreach($arr as $k=>$v)
{
if($v['pid']==$pid)
{
$tree[]=$v;
array_push($task,$v['id']);
$pid=$v['id'];
unset($arr[$k]);
$flag=true;
}
}
if($flag==false)
{
array_pop($task);
$pid=end($task);
}
}
return $tree;
}
print_r(iterator($arr));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值