1 回答

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
這可以通過遞歸函數(shù)來實(shí)現(xiàn),該函數(shù)從數(shù)組的給定級(jí)別推送所有項(xiàng)目,然后為任何children數(shù)組調(diào)用自身:
function list_items($array, $parent = 0) {
$output = array();
foreach ($array as $arr) {
$output[] = array('id' => $arr['id'], 'name' => $arr['name'], 'parent' => $parent);
if (is_array($arr['children'] ?? NULL)) {
$output = array_merge($output, list_items($arr['children'], $arr['id']));
}
}
return $output;
}
$items = list_items($array);
輸出(對(duì)于我稍微擴(kuò)展的數(shù)據(jù)):
Array
(
[0] => Array
(
[id] => 2
[name] => Item2
[parent] => 0
)
[1] => Array
(
[id] => 1
[name] => Item1
[parent] => 2
)
[2] => Array
(
[id] => 5
[name] => Item5
[parent] => 1
)
[3] => Array
(
[id] => 4
[name] => Item4
[parent] => 2
)
[4] => Array
(
[id] => 3
[name] => Item3
[parent] => 0
)
)
更新
原來是數(shù)組結(jié)構(gòu)不一致;當(dāng)只有一個(gè)孩子時(shí),只存儲(chǔ)孩子的值而不是單個(gè)元素?cái)?shù)組。這可以通過檢查數(shù)組以查看是否設(shè)置了id( Ид) 元素來處理,如果是,則在處理之前將數(shù)組推得更深一層:
function list_items($array, $parent = 0) {
$output = array();
if (isset($array['Ид'])) {
$array = array($array);
}
foreach ($array as $arr) {
if (!is_array($arr)) echo $arr;
$output[] = array('id' => $arr['Ид'], 'name' => $arr['Наименование'], 'parent' => $parent);
if (is_array($arr['Группы']['Группа'] ?? NULL)) {
$output = array_merge($output, list_items($arr['Группы']['Группа'], $arr['Ид']));
}
}
return $output;
}
$items = list_items($array);
print_r($items);
- 1 回答
- 0 關(guān)注
- 90 瀏覽
添加回答
舉報(bào)