Php HTML列表的嵌套数组
我有以下数组:Php HTML列表的嵌套数组,php,html,arrays,Php,Html,Arrays,我有以下数组: Array ( [0] => Array ( [ID] => 1 [PARENT] => 0 [NAME] => Your first category ) [1] => Array ( [ID] => 2 [PARENT] => 1
Array
(
[0] => Array
(
[ID] => 1
[PARENT] => 0
[NAME] => Your first category
)
[1] => Array
(
[ID] => 2
[PARENT] => 1
[NAME] => Your first forum
)
[2] => Array
(
[ID] => 4
[PARENT] => 1
[NAME] => Another Forum
)
[3] => Array
(
[ID] => 5
[PARENT] => 1
[NAME] => Good Forum
)
[4] => Array
(
[ID] => 6
[PARENT] => 0
[NAME] => Top Forum
)
[5] => Array
(
[ID] => 7
[PARENT] => 6
[NAME] => Sub Forum #1
)
[6] => Array
(
[ID] => 9
[PARENT] => 7
[NAME] => Sub Forum #1-1
)
[7] => Array
(
[ID] => 10
[PARENT] => 7
[NAME] => Sub Forum #1-2
)
[8] => Array
(
[ID] => 8
[PARENT] => 6
[NAME] => Sub Forum #2
)
)
好的,我这里有要求的var_导出结果:
array (
0 =>
array (
'ID' => '1',
'PARENT' => '0',
'NAME' => 'Your first category',
),
1 =>
array (
'ID' => '2',
'PARENT' => '1',
'NAME' => 'Your first forum',
),
2 =>
array (
'ID' => '4',
'PARENT' => '1',
'NAME' => 'Another Forum',
),
3 =>
array (
'ID' => '5',
'PARENT' => '1',
'NAME' => 'Good Forum',
),
4 =>
array (
'ID' => '6',
'PARENT' => '0',
'NAME' => 'Top Forum',
),
5 =>
array (
'ID' => '7',
'PARENT' => '6',
'NAME' => 'Sub Forum #1',
),
6 =>
array (
'ID' => '9',
'PARENT' => '7',
'NAME' => 'Sub Forum #1-1',
),
7 =>
array (
'ID' => '10',
'PARENT' => '7',
'NAME' => 'Sub Forum #1-2',
),
8 =>
array (
'ID' => '8',
'PARENT' => '6',
'NAME' => 'Sub Forum #2',
),
)
其中一些数组父值与另一个数组ID值共同响应。这有助于我使它们嵌套。但问题是:如何创建一个如下所示的HTML列表:
<ul>
<li id="1">
Your First Category
<ul>
<li id="2">
Your First Forum
</li>
<li id="4">
Another Forum
</li>
<li id="5">
Good Forum
</li>
<ul>
</li>
<li id="6">
Top Forum
<ul>
<li id="7">
Sub Forum #1
<ul>
<li id="9">
Sub Forum #1-1
</li>
<li id="10">
Sub Forum #1-2
</li>
</ul>
</li>
<li id="7">
Sub Forum #2
</li>
<ul>
</li>
</ul>
-
你的第一类
-
你的第一个论坛
-
另一个论坛
-
好论坛
-
顶级论坛
-
分论坛#1
-
分论坛#1-1
-
分论坛#1-2
-
分论坛#2
有什么想法吗?我会怎么做:
$menu[$parentID]=数组($child,$child,…)
makeMenu($menu,$parentID)
$data = array(
0 => array(
'ID' => '1',
'PARENT' => '0',
'NAME' => 'Your first category',
),
1 => array(
'ID' => '2',
'PARENT' => '1',
'NAME' => 'Your first forum',
),
2 => array(
'ID' => '4',
'PARENT' => '1',
'NAME' => 'Another Forum',
),
3 => array(
'ID' => '5',
'PARENT' => '1',
'NAME' => 'Good Forum',
),
4 => array(
'ID' => '6',
'PARENT' => '0',
'NAME' => 'Top Forum',
),
5 => array(
'ID' => '7',
'PARENT' => '6',
'NAME' => 'Sub Forum #1',
),
6 => array(
'ID' => '9',
'PARENT' => '7',
'NAME' => 'Sub Forum #1-1',
),
7 => array(
'ID' => '10',
'PARENT' => '7',
'NAME' => 'Sub Forum #1-2',
),
8 => array(
'ID' => '8',
'PARENT' => '6',
'NAME' => 'Sub Forum #2',
),
);
// reorder array
$menu = array();
foreach ( $data as $item ) {
$menu[$item['PARENT']][] = $item;
}
// print menu
function makeMenu($menu, $parentID) {
$html = "<ul>";
foreach ( $menu[$parentID] as $item ) {
$html .= "<li id='{$item['ID']}'>{$item['NAME']}";
if ( isset($menu[$item['ID']]) ) {
$html .= makeMenu($menu, $item['ID']);
}
$html .= "</li>";
}
$html .= "</ul>";
return $html;
}
echo makeMenu($menu, 0);
$data=array(
0=>数组(
'ID'=>'1',
“父项”=>“0”,
“名称”=>“您的第一个类别”,
),
1=>数组(
'ID'=>'2',
“父项”=>“1”,
“名称”=>“您的第一个论坛”,
),
2=>数组(
'ID'=>'4',
“父项”=>“1”,
“名称”=>“另一个论坛”,
),
3=>数组(
'ID'=>'5',
“父项”=>“1”,
“名称”=>“好论坛”,
),
4=>数组(
'ID'=>'6',
“父项”=>“0”,
“名称”=>“顶级论坛”,
),
5=>数组(
'ID'=>'7',
“父项”=>“6”,
“名称”=>“分论坛#1”,
),
6=>数组(
'ID'=>'9',
“父项”=>“7”,
“名称”=>“分论坛#1-1”,
),
7=>数组(
'ID'=>'10',
“父项”=>“7”,
“名称”=>“分论坛#1-2”,
),
8=>数组(
'ID'=>'8',
“父项”=>“6”,
“名称”=>“分论坛#2”,
),
);
//重排序数组
$menu=array();
foreach($数据作为$项){
$menu[$item['PARENT'][]=$item;
}
//打印菜单
函数makeMenu($menu$parentID){
$html=“”;
foreach($menu[$parentID]作为$item){
$html.=“{$item['NAME']}”;
如果(设置($menu[$item['ID']])){
$html.=makeMenu($menu,$item['ID']);
}
$html.=“”;
}
$html.=“
”;
返回$html;
}
echo Makeform($menu,0);
输出(手动添加间距):
-
你的第一类
- 您的第一个论坛
- 另一个论坛
- 很好的论坛
-
顶级论坛
- 分论坛#1
- 分论坛#1-1
- 分论坛#1-2
- 分论坛2
现在您有了一个正确的数组结构
但你可能必须把它翻过来,因为它是由孩子们组成的。但您的输出是由家长提供的
因此,与我发布的第二个foreach不同,请执行以下操作:
foreach($new_arr as $id => $data) $new_arr[$data['parent']]['children'][] =& $data;
如果您提供的是输出
var\u export()
,而不是print\u r()
,那么就容易多了。在将数组转换为HTML列表之前,我宁愿将其转换为正确的嵌套形式。这就是我需要的!更改数组形式,以便在以后的操作中满足HTML布局。我只是显示HTML以显示所需数组的形式,而不是让php对数组进行编号,而是使用ID列作为数组键。然后获取父级是一个简单的数组查找。你必须注意一个递归数组,其中父数组的父数组是子数组。你能告诉我你的确切意思吗?这看起来是个好主意,但我一点也不明白!:?谢谢你的片段!我现在就试试,我会在这里回答结果!:)@梅里亚诺斯,你只需要一个级别的孩子吗?不,我需要多个级别。我喜欢做的是从phpBB中检索所有类别和论坛作为嵌套列表。你现在可以在这里看到我的下一个问题,我有一个打字错误。我写了&
而不是=&
$new_arr = array();
foreach($arr as $data) $new_arr[$data['id']] = $data;
foreach($new_arr as $id => &$data) $data['parent'] =& $new_arr[$data['parent']];
foreach($new_arr as $id => $data) $new_arr[$data['parent']]['children'][] =& $data;