php递归问题

WBOY
Release: 2016-06-23 14:24:00
Original
1043 people have browsed it

本帖最后由 qq43599939 于 2013-08-28 12:42:25 编辑

<?php    $area = array(          0=>array('id'=>1,'name'=>'中国','pid'=>0),          1=>array('id'=>2,'name'=>'北京','pid'=>1),      );      print_r(catsort($area));     function catsort($cate, $pid = 0){        $arr = array();        foreach($cate as $v){            if ($v['pid'] == $pid){                $arr[] = $v;                $arr = array_merge($arr, catsort($cate ,$v['id']));                //$arr[] = $v;            }        }        return $arr;        }    ?>
Copy after login

这个问题让我很困惑,为什么 $arr[] = $v放在$arr = array_merge($arr, catsort($cate ,$v['id']))前面返回的先是中国,然后才是北京。而放到$arr = array_merge($arr, catsort($cate ,$v['id']))后面的时候却是北京先,后中国呢?请帮忙详细解释下,谢谢


回复讨论(解决方案)

你至少应该阅读过关于书的遍历吧?
递归就是遍历一颗树

根据访问结点操作发生位置命名:
① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
??访问根结点的操作发生在遍历其左右子树之前。
② LNR:中序遍历(InorderTraversal)
??访问根结点的操作发生在遍历其左右子树之中(间)。
③ LRN:后序遍历(PostorderTraversal)
??访问根结点的操作发生在遍历其左右子树之后。

$arr[] = $v放在$arr = array_merge($arr, catsort($cate ,$v['id']))前面
是前序遍历
放到$arr = array_merge($arr, catsort($cate ,$v['id']))后面
是后序遍历

那为什么放在前面就是前序,后面就是后序,不是很理解,能在说清楚点吗

        foreach($cate as $v){            if ($v['pid'] == $pid){                $arr[] = $v;                $arr = array_merge($arr, catsort($cate ,$v['id']));                //$arr[] = $v;            }        }
Copy after login


放前面的时候,中国先加到$arr中的没什么好说的。

        foreach($cate as $v){            if ($v['pid'] == $pid){                //$arr[] = $v;                $arr = array_merge($arr, catsort($cate ,$v['id'])); //这里catsort进入递归                $arr[] = $v;            }        }
Copy after login


放后面的时候,外层的array_merge函数处理第二个参数"catsort($cate,$v['id'])"时,递归进入里层,在里层执行了"$arr[]=$v",把北京先加入到了数组中,然后才返回外层,执行外层的"$arr[]=$v".

搞懂了,thank you

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!