【发布时间】:2020-12-17 12:14:08
【问题描述】:
我写了一个依赖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() 函数处理整个数据集,而不会使函数过于复杂?
【问题讨论】:
-
你尝试过什么调试问题?
-
我认为您必须在
json_decode中添加seconde 参数(true),以避免Cannot use object of type stdClass as array错误 -
这看起来像是测试驱动开发的绝妙练习 :)