第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何“展平”一個(gè)未知深度和長度的多維數(shù)組并記錄它的父子關(guān)系?

如何“展平”一個(gè)未知深度和長度的多維數(shù)組并記錄它的父子關(guān)系?

PHP
胡說叔叔 2022-12-30 17:51:18
我有一個(gè)如下所示的 PHP 數(shù)組:Array(    [0] => Array        (            [id] => 2            [name] => Item2            [children] => Array                (                    [0] => Array                        (                            [id] => 1                            [name] => Item1                            [children] => Array                                (                                    [0] => Array                                        (                                            [id] => 5                                            [name] => Item5                                        )                                )                        )                    [1] => Array                        (                            [id] => 4                            [name] => Item4                        )                )        )    [1] => Array        (            [id] => 3            [name] => Item3        ))它具有未知(不可預(yù)測(cè))的深度和長度。任何級(jí)別的任何項(xiàng)目都可能有也可能沒有孩子。它是從包含產(chǎn)品組的 xml 文件創(chuàng)建的。我想將它轉(zhuǎn)換為包含三個(gè)元素?cái)?shù)組的數(shù)組:id、name 和 parent id:[0] => array('id' => '2', 'name' => 'Item2', 'parent' => 0),[1] => array('id' => '1', 'name' => 'Item1', 'parent' => 2),[2] => array('id' => '4', 'name' => 'Item4', 'parent' => 2) etc.我該怎么做?謝謝!
查看完整描述

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

        )

)

3v4l.org 上的演示

更新


原來是數(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);

3v4l.org 上的演示


查看完整回答
反對(duì) 回復(fù) 2022-12-30
  • 1 回答
  • 0 關(guān)注
  • 90 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)