我想从二维数组中创建HTML(带有ul和li)的嵌套列表。
该数组如下所示:
myArray["1"]["name"] -> Apple
myArray["1"]["parent"] -> 2
myArray["2"]["name"] -> Fruits
myArray["2"]["parent"] -> 3
myArray["3"]["name"] -> Food
myArray["3"]["parent"] -> (empty)
myArray["4"]["name"] -> Water
myArray["4"]["parent"] -> 5
myArray["5"]["name"] -> Drinks
myArray["5"]["parent"] -> (empty)
myArray["6"]["name"] -> Milk
myArray["6"]["parent"] -> 5
现在我想找到所有这些关系(也包括更多的层),并使用HTML列表元素来显示它们:
$allObjects = db_getAll();
function r($parent, $arrayAllObjects){
foreach ($arrayAllObjects as $object) {
if ($object["parent"]==$parent) {
return ("<ul>".$object["name"]."<li>". r($object["ID"], $arrayAllObjects)."</li></ul>");
}
}
}
echo r("0", $allObjects);
开始良好,第一个“分支/手臂”完美显示,但之后(末尾的第一个叶子)停止:(
当前结果:
-Food
-Fruits
-Apple
缺少:
-Drinks
-Water
-Milk
-Example
-Test
-Test
-...
-...
我忘记了什么?
非常感谢您!
答案 0 :(得分:0)
问题在于,在基础层处理完第一项后,您就可以在return
循环内foreach
进行循环操作,这意味着它不会再涉及其他任何项。
相反,您需要构建所有输出并将其从函数末尾返回...
function extractLayer($parent, $arrayAllObjects){
$output = "";
foreach ($arrayAllObjects as $object) {
if ($object["parent"]==$parent) {
$subLayer = extractLayer($object["ID"], $arrayAllObjects);
if ( !empty($subLayer) ) {
$output .="<ul>".$object["name"].$subLayer."</ul>";
}
else {
$output .= "<li>".$object["name"]."</li>";
}
}
}
return $output;
}
echo extractLayer("0", $allObjects);
我还更改了函数名,因为r
不明显。
只需对此进行更新,因为即使没有子层,每个叶子也在构建自己的列表。因此,这会检查子图层,如果没有,则将其放入<li>
标签中。