Php 了解多维数组中的元素级别

Php 了解多维数组中的元素级别,php,multidimensional-array,levels,Php,Multidimensional Array,Levels,我在这里再次讨论php中的数组。我需要你的手指引我正确的方向。假设以下数组: -fruits --green ---limon ---mango --red ---apple -cars --ferrari ---enzo ----blue ----black ---318 --lamborg ---spider

我在这里再次讨论php中的数组。我需要你的手指引我正确的方向。假设以下数组:

-fruits
    --green
        ---limon
        ---mango
    --red
        ---apple


-cars
    --ferrari
        ---enzo
            ----blue
            ----black
        ---318
    --lamborg
        ---spider
        ---gallardo
            ----gallado-96
                -----blue
                -----red
            -----gallado-98
-(连字符)符号仅表示深层

好的,我需要构建另一个数组(或其他什么),因为它应该打印为HTML select,如下所示:

-fruits
--green
---limon
---mango
--red
---apple
-cars
--ferrari
---enzo
----blue
----black
---318
--lamborg
---spider
---gallardo
----gallado-96
-----blue
-----red
-----gallado-98
$items = createSelect($temp, array(), 0);
看起来对于每个级别元素,它应该添加一个空格或连字符以确定它属于特定的父元素

编辑
他们已经提供了一个关于我最终代码的答案。html select元素将每个级别显示为字符串(在文本开始时重复“-”而不是多级元素)。

下面是一个简单的递归函数,用于在给定数组的情况下构建select下拉列表。很遗憾,我无法测试它,但请告诉我它是否有效。用法如下:

function generateDropdown($array, $level = 1)
{
    if ($level == 1)
    {
        $menu = '<select>';
    }
    foreach ($array as $a)
    {
        if (is_array($a))
        {
            $menu .= generateDropdown($a, $level+1);
        }
        else
        {
            $menu .= '<option>'.str_pad('',$level,'-').$a.'</option>'."\n";
        }
    }
    if ($level == 1)
    {
        $menu = '</select>';
    }
    return $menu;
}
函数generateDropdown($array,$level=1)
{
如果($level==1)
{
$menu='';
}
foreach($a数组)
{
if(is_数组($a))
{
$menu.=generateDropdown($a,$level+1);
}
其他的
{
$menu.=''.str_焊盘(''.$level'-').$a'.\n;
}
}
如果($level==1)
{
$menu='';
}
返回$menu;
}

好的,我是在@jmgardhn2的帮助下得到的

数据 这是我的阵列:

$temp = array(
            array(
                'name' => 'fruits',
                'sons' => array(
                            array(
                                'name' => 'green',
                                'sons' => array(
                                        array(
                                            'name' => 'mango'
                                        ),
                                        array(
                                            'name' => 'banana',
                                        )
                                    )
                                )
                            )
            ),
            array(
                'name' => 'cars',
                'sons' => array(
                            array(
                                'name' => 'italy',
                                'sons' => array(
                                            array(
                                                'name' => 'ferrari',
                                                'sons' => array(
                                                        array(
                                                            'name' => 'red'
                                                        ),
                                                        array(
                                                            'name' => 'black'
                                                        ),
                                                    )
                                            ),
                                            array(
                                                'name' => 'fiat',
                                            )
                                )
                            ),
                            array(
                                'name' => 'germany',
                                'sons' => array(
                                            array(
                                                'name' => 'bmw',
                                            )
                                        )
                            ),
                )
            )    
        );
递归函数 现在,以下函数将提供一个数组,其中包含
[level]=>[name]
等项:

function createSelect($tree, $items, $level)
{
    foreach ($tree as $key)
    {
        if (is_array($key))
        {
            $items = createSelect($key, $items, $level + 1);
        }
        else
        {
            $items[] = array('level' => $level, 'text' => $key);
        }
    }

    return $items;
}
调用函数 现在,按如下方式调用函数:

-fruits
--green
---limon
---mango
--red
---apple
-cars
--ferrari
---enzo
----blue
----black
---318
--lamborg
---spider
---gallardo
----gallado-96
-----blue
-----red
-----gallado-98
$items = createSelect($temp, array(), 0);
输出 如果迭代最终的$items数组,它将如下所示:

1fruits
2green
3mango
3banana
1cars
2italy
3ferrari
4red
4black
3fiat
2germany
3bmw

你的数组到底有多少层?似乎你使用了错误的工具来完成这项工作。我记下了你的问题,因为你没有表现出自己解决这个问题的努力。@AlexandreP.Levasseur,没问题。没有限制,树可以根据需要有多少层。我将尝试使用递归更新我的问题ve函数。此外,数组的使用很重要,因为它已经存在于应用程序中。您的问题目前缺少一些真实的PHP代码,无法准确显示您已经拥有的内容、哪些内容不起作用以及预期的输出。此外,您是否知道HTML规范目前只允许OPTION元素使用一个级别?@Jocelyn,我很抱歉好的,但是我的帖子现在已经更新了。谢谢你的反馈。:)非常感谢你,你的解决方案让我找到了正确的方向:)