簡體   English   中英

二維數組中的嵌套列表

[英]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
   -...
 -...

我忘記了什么?

非常感謝!

問題在於,在基礎層處理完第一項后,您returnforeach循環內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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM