php - 这个递归算法哪里写错了,为什么打印出来的内容少了
本文介绍了php - 这个递归算法哪里写错了,为什么打印出来的内容少了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
get_child这个方法的$menu用了&$menu,然后方法里面使用 unset($menu[$key])就出问题了
$menu=array(
'120'=>array('module_id'=>'120','module_name'=>'系统','pid'=>0,'level'=>1),
'121'=>array('module_id'=>'121','module_name'=>'系统','pid'=>0,'level'=>1),
'122'=>array('module_id'=>'122','module_name'=>'系统','pid'=>121,'level'=>2),
'123'=>array('module_id'=>'123','module_name'=>'系统','pid'=>122,'level'=>3),
...
);
$this->get_child('0', $menu, $data);
echo '<pre>';
var_dump($data);
public function get_child($pid, &$menu, &$data) {
foreach ($menu as $key => $value) {
if ($value['pid'] == $pid) {
if ($value['level'] == 2) {
$data[] = '|---' . $value['module_name'];
} else if ($value['level'] == 3) {
$data[] = ' |---' . $value['module_name'];
} else {
$data[] = $value['module_name'];
}
unset($menu[$key]);
$this->get_child($value['module_id'], $menu, $data);
}
}
}
解决方案
打印出来东西没少啊,这是我本地运行的结果
<pre>array(4) {
[0]=>
string(6) "系统"
[1]=>
string(6) "系统"
[2]=>
string(10) "|---系统"
[3]=>
string(14) " |---系统"
}
- 第一次循环
pid=0
并且level
为1
,所以data
添加了系统
,并且递归调用了get_child()
,但是没有任何item
的pid=120
,所以执行下一次循环, - 此时是第二次循环,
pid
还是0
并且level
为1
,所以还是系统
,这时候递归存在pid = 121
,并且level =2
,所以data
添加|---系统
,然后再次递归, - 这时
pid=122
并且level=3
,所以data
添加|---系统
,然后继续递归; - 这时候
pid=123
,但是没有pid
是等于123
的,然后继续for
循环,pid=0
,但此时再也没有pid=0
的了,因为前面都unset
掉了
这篇关于php - 这个递归算法哪里写错了,为什么打印出来的内容少了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文