首页
IT
登录
6mi
u
盘
搜
搜 索
IT
php递归和迭代的区别
php递归和迭代的区别
xiaoxiao
2021-04-17
40
<?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
));
?>
转载请注明原文地址: https://ju.6miu.com/read-674074.html
技术
最新回复
(
0
)