php中联合数组失败


failure on union arrays in php

我有一个这样的数组:

Array
(
    [6] => Array
        (
            [cate_id] => 6
            [cate_name] => mobile
            [cate_parent] => 0
            [cate_order] => 2
            [children] => Array
                (
                    [17] => Array
                        (
                            [cate_id] => 17
                            [cate_name] => old styled phone
                            [cate_parent] => 6
                            [cate_order] => 2
                            [children] => Array
                                (
                                    [24] => Array
                                        (
                                            [cate_id] => 24
                                            [cate_name] => nokia1
                                            [cate_parent] => 17
                                            [cate_order] => 1
                                        )
                                )
                        )
                    [18] => Array
                        (
                            [cate_id] => 18
                            [cate_name] => smart phone
                            [cate_parent] => 6
                            [cate_order] => 1
                            [children] => Array
                                (
                                    [21] => Array
                                        (
                                            [cate_id] => 21
                                            [cate_name] => apple
                                            [cate_parent] => 18
                                            [cate_order] => 1
                                        )
                                    [23] => Array
                                        (
                                            [cate_id] => 23
                                            [cate_name] => nokia
                                            [cate_parent] => 18
                                            [cate_order] => 1
                                        )
                                )
                        )
                    [20] => Array
                        (
                            [cate_id] => 20
                            [cate_name] => tablet
                            [cate_parent] => 6
                            [cate_order] => 3
                        )
                )
        )
    [19] => Array
        (
            [cate_id] => 19
            [cate_name] => accessories
            [cate_parent] => 0
            [cate_order] => 3
            [children] => Array
                (
                    [22] => Array
                        (
                            [cate_id] => 22
                            [cate_name] => phone case
                            [cate_parent] => 19
                            [cate_order] => 1
                        )
                )
        )
)

我写了一个函数,它将获得特定类别的孩子的id。例如,如果我输入"6",它将返回17,24,18,21,23,20。下面是我的函数:

function get_category_children($categories_tree, $parent)
    {
    //$children_list = '';
        $children_list = array();
        foreach ($categories_tree as $categories_branch)
        {
            if ($categories_branch['cate_parent'] == $parent)
            {
                $children_list[] = $categories_branch['cate_id'];
            }
            else 
            {
                //echo "{$categories_branch['cate_id']},";
            }
            if( ! empty($categories_branch['children']))
            {
                //echo "{$categories_branch['cate_id']},";
                $children_list += get_category_children($categories_branch['children'], $categories_branch['cate_id']);
            }
        }
        return $children_list;
    }

但是它只返回17,18,20。起初,我认为我的函数逻辑有问题,但是当我将$children_list的类型从数组更改为字符串时,如下所示:

function get_category_children($categories_tree, $parent)
{
    $children_list = '';
    //$children_list = array();
    foreach ($categories_tree as $categories_branch)
    {
        if ($categories_branch['cate_parent'] == $parent)
        {
            $children_list .= $categories_branch['cate_id'].',';
        }
        else 
        {
            //echo "{$categories_branch['cate_id']},";
        }
        if( ! empty($categories_branch['children']))
        {
            //echo "{$categories_branch['cate_id']},";
            $children_list .= get_category_children($categories_branch['children'], $categories_branch['cate_id']);
        }
    }
    return $children_list;
}

它的工作很好,并返回我需要的一切,所以我认为可能是$children_list += get_category_children($categories_branch['children'], $categories_branch['cate_id']);有问题,所以新数组没有添加到旧数组,但我不知道为什么,以及如何修复它?

function getChildren($in_arr) {
  $out_arr = array();
  foreach( $in_arr['children'] as $key => $child ) {
    $out_arr[] = $key;
    if( isset($child['children'] ) {
      $out_arr = array_merge($out_arr, get_children($child));
    }
    return $out_arr;
  }
}

$children_list += get_category_children($categories_branch['children'], $categories_branch['cate_id']);是你的问题。不能使用+=加入阵列。对于整数的递增效果很好,但对于数组就不那么好了;)

可以合并数组:

$children_list = array_merge( $children_list, 
get_category_children($categories_branch['children'], $categories_branch['cate_id']) );

完整代码:

function get_category_children($categories_tree, $parent)
    {
    //$children_list = '';
        $children_list = array();
        foreach ($categories_tree as $categories_branch)
        {
            if ($categories_branch['cate_parent'] == $parent)
            {
                $children_list[] = $categories_branch['cate_id'];
            }
            else 
            {
                //echo "{$categories_branch['cate_id']},";
            }
            if( ! empty($categories_branch['children']))
            {
                //echo "{$categories_branch['cate_id']},";
                // $children_list += get_category_children($categories_branch['children'], $categories_branch['cate_id']);
                $children_list = array_merge( $children_list, 
                get_category_children($categories_branch['children'], $categories_branch['cate_id']) );
            }
        }
        return $children_list;
    }

不能用+运算符合并数组。你需要array_merge