2 回答

TA贡献2011条经验 获得超2个赞
问题是,正如你所拥有的
return printAll($v['children'], "{$value}.", $values);
在整个过程中,这将忽略后续元素中的任何其他项目。
一个快速修复方法是将新值添加到当前值中,并在例程结束时返回 1...
$values += printAll($v['children'], "{$value}.", $values);

TA贡献1850条经验 获得超11个赞
您需要删除return printAll(...)并将值添加到变量中。否则它将停止在第一个具有'children'
<?php
function printAll($a, $level = '', $values = []) {
foreach($a as $v) {
$values[] = $value = "{$level}{$v['id']}";
if(!empty($v['children'])) {
//Just remove this return and add to the variable you already have.
$values = printAll($v['children'], "{$value}.", $values);
}
}
return $values;
}
$a = json_decode('[{"id":1,"children":[{"id":2},{"id":5,"children":[{"id":3}]}]},{"id":4}]',true);
var_dump(printAll($a));
- 2 回答
- 0 关注
- 268 浏览
添加回答
举报