我有一个数组,其中的孩子可以无限期地有更多的孩子,依此类推。我需要获得所有父母和孩子的身份证。
我尝试使用一个调用自身的函数遍历数组,但是它不起作用。我试过:(初始树是前面提到的数组)
public function recursiveTree($tree,$data = NULL){
$data[] = $tree['id'];
if($tree['children']){
foreach ($tree['children'] as $key => $treeChildMin){
return $this->recursiveTree($treeChildMin,$data);
}
}else{
return $data;
}
}
它返回array { [0]=> int(3) [1]=> int(4) [2]=> int(5) }
一个示例输入数组如下。在该示例中,我想要一个具有所有ID的数组,例如$values = [3,4,5,7,8,9,10,11];
。
`array(5) {
["id"]=>
int(3)
["children"]=>
array(2) {
[0]=>
array(5) {
["id"]=>
int(4)
["children"]=>
array(2) {
[0]=>
array(5) {
["id"]=>
int(5)
["children"]=>
array(0) {
}
}
[1]=>
array(5) {
["id"]=>
int(7)
["children"]=>
array(0) {
}
}
}
}
[1]=>
array(5) {
["id"]=>
int(8)
["children"]=>
array(3) {
[0]=>
array(5) {
["id"]=>
int(9)
["children"]=>
array(0) {
}
}
[1]=>
array(5) {
["id"]=>
int(10)
["children"]=>
array(0) {
}
}
[2]=>
array(5) {
["id"]=>
int(11)
["children"]=>
array(0) {
}
}
}
}
}
}
答案 0 :(得分:1)
代码问题:
因此,您仅需要添加ID(如果存在),而不是在循环内返回,而是将每个子ID都添加到数组中,然后将所有ID合并为返回值。
function get_all_ids($array) {
// add id conditionally
$ids = isset($array['id']) ? [[$array['id']]] : [];
// accumulate ids from all children recursively
// note that you don't need an if here. If children is empty the loop won't execute
foreach ($array['children'] as $child) {
$ids[] = get_all_ids($child);
}
// return merged results
return array_merge(...$ids);
}