Php 如何将多维树数组转换为简单数组以与“选择”组合框一起使用

Php 如何将多维树数组转换为简单数组以与“选择”组合框一起使用,php,arrays,Php,Arrays,我正在PHP中努力进行数组转换。 我有一个多维数组,它返回以下内容: var_出口($arr) 但是,我需要将其转换为以下内容: (var_dump) 数组 ( [0]=>阵列 ( [值]=>54 [菜单标题]=>EN [页码代码]=>54 [图标]=>EN [所选]=> ) [1] =>阵列 ( [值]=>51 [菜单标题]=>--图库 [页码代码]=>--51 [图标]=>无 [所选]=> ) [2] =>阵列 ( [值]=>56 [菜单标题]=>--另一个 [页码代码]=>--56 [图

我正在PHP中努力进行数组转换。 我有一个多维数组,它返回以下内容:

var_出口($arr)

但是,我需要将其转换为以下内容: (var_dump)

数组
(
[0]=>阵列
(
[值]=>54
[菜单标题]=>EN
[页码代码]=>54
[图标]=>EN
[所选]=>
)
[1] =>阵列
(
[值]=>51
[菜单标题]=>--图库
[页码代码]=>--51
[图标]=>无
[所选]=>
)
[2] =>阵列
(
[值]=>56
[菜单标题]=>--另一个
[页码代码]=>--56
[图标]=>无
[所选]=>
)
[3] =>阵列
(
[值]=>59
[菜单标题]=>-->另一个菜单的子菜单
[页码代码]=>--59
[图标]=>无
[所选]=>
)
)
我从昨天起就一直坐在这个问题上,不知怎么的,我不能让它正常工作

谢谢你的提示。
Steffano

当我需要迭代嵌套数组时,首先想到的是。由于我们有一个复杂的数组,有着非平凡的叶子规则(据我所知,无论数组元素是否为数组,默认规则),我们需要扩展和重写两个方法:和

然后我们可以对该迭代器进行迭代器,并收集所有叶:

$iterator = new RecursiveIteratorIterator(
    new CustomRecursiveArrayIterator($array) 
);

$leafs = [];
foreach ($iterator as $leaf) {
    $leafs[] = $leaf;
}
请注意,这是可能的,因为has mode
RecursiveIteratorIterator::LEAVES_ONLY
,这是默认设置的

这是


正如您所看到的,虽然文档很差,但功能非常强大。

请不要对第一个数组使用
var\u dump
而使用
var\u export
,这样就可以对其进行复制和粘贴。以前的数组具有不同的结构。另外,我不知道当您有
父\u id
时为什么需要嵌套。然而,您的数据表示显然有问题。所以我建议你重新考虑阵列结构,如果可以的话。你好@sevavietl,你让我开心了。。。!!!多谢各位@sevavietl,我将上面的数组改回了原来的数组,因此它现在与您的代码匹配。再次感谢您。感谢您的澄清。确实非常有用。我总是尽量避免使用这些类,正如你所说,它们没有很好的文档记录,我也不太“理解”。但是你的澄清非常有帮助,我开始理解这些类到底有多强大。亲切问候,,Esteffano@Steffano,然后您可以将其标记为正确答案;)我该怎么做?有这个按钮吗?我在这个平台上是处女。编辑:哦,我想我找到了,是绿色箭头,对吗-P
class CustomRecursiveArrayIterator extends RecursiveArrayIterator
{
    public function hasChildren()
    {
        return !empty($this->current()['parent']);
    }

    public function getChildren()
    {
        $children = array_filter($this->current()['parent'], function ($child) {
            return !isset($child['parent']) || !empty($child['parent']);
        });

        return new static($children);
    }
}
$iterator = new RecursiveIteratorIterator(
    new CustomRecursiveArrayIterator($array) 
);

$leafs = [];
foreach ($iterator as $leaf) {
    $leafs[] = $leaf;
}