Php 了解多维数组中的元素级别
我在这里再次讨论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
-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,我很抱歉好的,但是我的帖子现在已经更新了。谢谢你的反馈。:)非常感谢你,你的解决方案让我找到了正确的方向:)