使用递归PHP计算父数组
如何使用递归对父数组进行计数 这是我的数组使用递归PHP计算父数组,php,arrays,recursion,Php,Arrays,Recursion,如何使用递归对父数组进行计数 这是我的数组 array ( [0] => array ( [id] => 1 [parent_id] => 0 [children] => array ( [0] => array ( [id] => 2 [p
array
(
[0] => array
(
[id] => 1
[parent_id] => 0
[children] => array
(
[0] => array
(
[id] => 2
[parent_id] => 1
[children] => array
(
[0] => array
(
[id] => 3
[parent_id] => 2
[children] => array
(
[0] => array
(
[id] => 4
[parent_id] => 3,
),
),
),
),
)
[1] => array
(
[id] => 5
[parent_id] => 1,
),
),
)
[1] => array
(
[id] => 1
[parent_id] => 0
[children] => array
(
[id] => 2
[parent_id] => 1
[children] => array
(
[id] => 3
[parent_id] => 2,
),
),
)
[2] => array
(
[id] => 1
[parent_id] => 0,
),
)
结果是我想要这样的东西
array
(
[0] => array
(
[id] => 1
[parent_id] => 0
[parent_count] => 0
[children] => array
(
[0] => array
(
[id] => 2
[parent_id] => 1
[parent_count] => 1
[children] => array
(
[0] => array
(
[id] => 3
[parent_id] => 2
[parent_count] => 2
[children] => array
(
[0] => array
(
[id] => 4
[parent_id] => 3
[parent_count] => 3,
),
),
),
),
)
[1] => array
(
[id] => 5
[parent_count] => 1
[parent_id] => 1,
),
),
)
[1] => array
(
[id] => 1
[parent_id] => 0
[parent_count] => 0
[children] => array
(
[id] => 2
[parent_id] => 1
[parent_count] => 1
[children] => array
(
[id] => 3
[parent_id] => 2
[parent_count] => 2,
),
),
)
[2] => array
(
[id] => 1
[parent_id] => 0
[parent_count] => 0,
),
)
这里是原始数组
$data[0] = array(
'id' => 1,
'parent_id' => 0,
'children' => array(
'0' => array(
'id' => 2,
'parent_id' => 1,
'children' => array(
'0' => array('id' => 3,
'parent_id' => 2,
'children' => array(
'0' => array(
'id' => 4,
'parent_id' => 3,
),
),
),
),
),
'1' => array(
'id' => 5,
'parent_id' => 1,
),
),
);
$data[1] = array(
'id' => 1,
'parent_id' => 0,
'children' => array(
'id' => 2,
'parent_id' => 1,
'children' => array(
'id' => 3,
'parent_id' => 2,
),
),
);
$data[2] = array(
'id' => 1,
'parent_id' => 0,
);
这里是我的递归函数
function recursive(array $data, $count = 0)
{
$count_parent = array();
foreach ($data as $key => $dat) {
if ($dat['parent_id'] == 0) {
$data['count_parent'] = 0;
if (isset($dat['children'])) {
recursive($dat['children'], $count);
}
} else if ($dat['parent_id'] != 0 && array_key_exists('children', $dat)) {
$count++;
$data[$key]['count_parent'] = $count;
if (isset($dat['children'])) {
recursive($dat['children'], $count);
}
} else if ($dat['parent_id'] != 0 && !array_key_exists('children', $dat)) {
$count++;
$data[$key]['count_parent'] = $count;
} else {
$data['count_parent'] = 0;
}
$count_parent = $data;
}
return $count_parent;
}
它不起作用。我不知道如何创建递归,我是新使用这种方法的
我真的很感谢你的帮助
谢谢:)试试这个:
<?php
function recursive(&$data, $count = 0) {
$current_parent = "";
foreach ($data as $key => &$dat) {
if (is_array($dat)) {
if ($current_parent != $dat['parent_id']) {
$count++;
$current_parent = $dat['parent_id'];
}
if ($dat['parent_id'] == 0)
$count = 0;
$dat['count_parent'] = $count;
}
if (is_array($dat) && array_key_exists('children', $dat)) {
recursive($dat['children'], $count);
}
}
}
recursive($data);
echo "<pre>";
print_r($data);
请正确设置格式并尽可能缩小数组大小。您正在递归调用函数,但没有对它返回的值执行任何操作。是否需要类似于“当前深度”计数器的东西?在您的示例中parent_id
和parent_count
是相同的。是不是所有的情况都是这样?@apokryfos-ya,类似的,但我希望每个孩子都计算他们所有的父母,并为他们的父母添加新的密钥总数,很抱歉我的英语不好。。