关于递归的问题

在递归时,关于getTreeCategory()函数传递的第三个参数,在if()中打印$level,为什么结果不一样呢? ++$level 应该是等同于 $level+1啊。按理都应该输出 0 1 2 2 2 0 啊!!!

第三个参数如果是 $level+1 ,这时打印$level会输出:
C:\wamp64\www\taobao\c.php:42:int 0
C:\wamp64\www\taobao\c.php:42:int 1
C:\wamp64\www\taobao\c.php:42:int 2
C:\wamp64\www\taobao\c.php:42:int 2
C:\wamp64\www\taobao\c.php:42:int 2
C:\wamp64\www\taobao\c.php:42:int 0

第三个参数如果是 ++$level ,这时打印$level会输出:
C:\wamp64\www\taobao\c.php:42:int 0
C:\wamp64\www\taobao\c.php:42:int 1
C:\wamp64\www\taobao\c.php:42:int 2
C:\wamp64\www\taobao\c.php:42:int 3
C:\wamp64\www\taobao\c.php:42:int 4
C:\wamp64\www\taobao\c.php:42:int 1

$cat_list = [
    [
        'cat_id' => '1',
        'cat_name' =>  'web前端',
        'parent_id' =>  '0'
    ], [
        'cat_id' => '2',
        'cat_name' =>  'PHP',
        'parent_id' =>  '0'
    ], [
        'cat_id' =>  '3',
        'cat_name' =>  'JavaScript',
        'parent_id' =>  '1'
    ], [
        'cat_id' =>  '4',
        'cat_name' =>  'angularJS',
        'parent_id' =>  '3'
    ], [
        'cat_id' =>  '5',
        'cat_name' => 'vueJS',
        'parent_id' => '3'
    ], [
        'cat_id' =>  '6',
        'cat_name' =>  'reactJS',
        'parent_id' =>  '3'
    ]
];
function getTreeCategory($cat_list, $cat_id = 0, $level = 0)
{
    //遍历数组得到每一个元素
    static $arr = [];
    foreach ($cat_list as $k => $v) {
        //只要$v['parent_id'] == $cat_id,那么说明当前$v的,父类是$cat_id
        if ($v['parent_id'] == $cat_id) {
            $v['level'] = $level;
            $arr[] = $v;
            //递归
            //getTreeCategory($cat_list, $v['cat_id'], $level + 1);
            getTreeCategory($cat_list, $v['cat_id'], ++$level);
        }
    }
    return $arr;
}
var_dump(getTreeCategory($cat_list));
阅读 1.1k
1 个回答
function getTreeCategory($cat_list, $cat_id = 0, $level = 0)
{
    foreach ($cat_list as $k => $v) {
        // 此处为循环递归
            //getTreeCategory($cat_list, $v['cat_id'], $level + 1); // level本向没变, 所以此层递归里面的level没变, 更深一层的递归level才+1
            getTreeCategory($cat_list, $v['cat_id'], ++$level); // level的值变了, 循环的下一轮level值就变了.
    }
    return $arr;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题