0

好吧,我又来这里处理 php 中的数组了。我需要你的手来指引我正确的方向。假设以下数组:

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


-cars
    --ferrari
        ---enzo
            ----blue
            ----black
        ---318
    --lamborg
        ---spider
        ---gallardo
            ----gallado-96
                -----blue
                -----red
            -----gallado-98

- 连字符)符号仅说明深层。

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

-fruits
--green
---limon
---mango
--red
---apple
-cars
--ferrari
---enzo
----blue
----black
---318
--lamborg
---spider
---gallardo
----gallado-96
-----blue
-----red
-----gallado-98

看起来对于每个级别元素,它应该添加一个空格或连字符来确定它属于特定的父级。

编辑

提供了我的最终代码的答案。html select 元素将每个级别显示为字符串(在文本的开头重复“-”而不是多级元素。

4

2 回答 2

1

这是一个简单的递归函数,用于在给定数组的情况下构建选择下拉菜单。不幸的是,我无法对其进行测试,但请告诉我它是否有效。用法如下:

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;
}
于 2012-09-30T02:07:23.123 回答
0

好的,我在@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;
}

调用函数

现在,调用如下函数:

$items = createSelect($temp, array(), 0);

输出

如果您迭代最终的 $items 数组,它将如下所示:

1fruits
2green
3mango
3banana
1cars
2italy
3ferrari
4red
4black
3fiat
2germany
3bmw
于 2012-09-30T03:01:26.130 回答