我有一个这样的数组:
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