扁平化多级对象数组的函数

我有一个 stdObjects 数组,它们是多级的。我需要把它们弄平。


这是对象数组:


[

    (int) 0 => object(stdClass) {

        link => ''

        icon => ''

        title => 'Main'

        id => (int) 2

        children => [

            (int) 0 => object(stdClass) {

                link => 'YTo0OntzOjEwOiJjb250cm9sbGVyIjtzOjU6InBhZ2VzIjtzOjY6ImFjdGlvbiI7czo3OiJkaXNwbGF5IjtzOjU6InBhc3MwIjtzOjQ6ImhvbWUiO3M6NToicGFzczEiO3M6MDoiIjt9'

                icon => 'fa-tachometer-alt'

                title => 'Dashboard'

                id => (int) 3

            }

        ]

    }

]

现在我创建了以下函数来将多级(可以达到 4 级深)减少到单级并将对象转换为经典数组:


function reduceArrayOfObjects(array $array, array $flatArray, $children = 'children') {

    foreach($array as $lvl1) {

        $lvl1 = (array) $lvl1;

        if(isset($lvl1[$children])) {

            reduceArrayOfObjects($lvl1[$children], $flatArray, $children);

            unset($lvl1[$children]);

        }

        $flatArray[] = $lvl1;

    }


    return $flatArray;

}


$multiLevel = []; // this is the array of objects

$newArray = [];

reduceArrayOfObjects($multiLevel, $newArray);

它不能正常工作,我只能将第一级放回我的新阵列中。我尝试了很多关于如何获得结果的变化,但所有这些都失败了。当我对所有foreach()循环进行硬编码时,它可以工作......


这是我当前的输出:


[

    (int) 0 => [

        'link' => '',

        'icon' => '',

        'title' => 'Main',

        'id' => (int) 2

    ]

]

任何人都知道如何解决我的问题?


慕标琳琳
浏览 88回答 1
1回答

MMTTMM

我只需要添加&到函数中:reduceArrayOfObjects(array $array, array &$flatArray, $children = 'children) {}
打开App,查看更多内容
随时随地看视频慕课网APP