好吧,我在这里再次处理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
看起来对于每个级别元素,它应该添加一个空格或连字符来确定它属于特定的父级。
已经提供了答案,提供了我的最终代码。 html select元素将每个级别显示为字符串(在文本的乞讨处重复“ - ”而不是多级元素。
答案 0 :(得分:0)
这是一个简单的递归函数,用于在给定数组的情况下构建选择下拉列表。不幸的是我无法测试它,但让我知道它是否有效。用法如下:
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;
}
答案 1 :(得分: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