[英]Nested list from two-dimensional Array
我想從二維數組中創建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
-...
-...
我忘記了什么?
非常感謝!
問題在於,在基礎層處理完第一項后,您return
在foreach
循環內return
,這意味着它將不再繼續處理其他項。
相反,您需要構建所有輸出並從函數末尾返回此輸出...
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>
標記中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.