我写了一个递归函数,它依赖于echo工作,并且它工作得很好。但是,为了挑战自己,我想让它返回一个已处理值的数组,而不是直接回显这些值。
printAll(
json_decode('[{"id":1,"children":[{"id":2},{"id":5,"children":[{"id":3}]}]},{"id":4}]', true)
);
function printAll($a, $level = '', $values = []) {
foreach($a as $v) {
$values[] = $value = "{$level}{$v['id']}";
if(!empty($v['children'])) {
return printAll($v['children'], "{$value}.", $values);
}
}
return $values;
}
但我得到了意想不到的结果。该函数当前返回一个如下所示的数组:
Array
(
[0] => 1
[1] => 1.2
[2] => 1.5
[3] => 1.5.3
)
但在这种情况下,我期待的是:
Array
(
[0] => 1
[1] => 1.2
[2] => 1.5
[3] => 1.5.3
[4] => 4
)
看起来我的递归函数只处理 的第一个值及其$data所有子项,但从不处理 的其余部分$data。我假设这是因为我正在使用return它结束循环。
我的问题是,如何让我的printAll()函数处理整组数据,而又不会使函数过于复杂?
森林海
慕盖茨4494581