2
如何用遞歸算父陣列..計數父陣列採用遞歸PHP
這裏是我的陣列
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;
}
它沒有工作。我不知道如何創建遞歸,我是新的使用這種方法。
我真的很感謝一些幫助。
謝謝:)
請妥善格式化,如果可能縮小數組的大小。 –
你正在遞歸地調用你的函數,但你沒有對它返回的值做任何事情。 – jeroen
你需要像「當前深度」計數器那樣的東西嗎? – apokryfos