簡體   English   中英

建立遞歸導航菜單列表

[英]building recursive navigation menu list

我有$menu_array3作為

Array
(
    [9] => Array
        (
            [category_name] => cat1
            [category_id] => 9
            [children] => Array
                (
                    [12] => Array
                        (
                            [category_name] => test5
                            [category_id] => 12
                        )

                    [10] => Array
                        (
                            [category_name] => cat2
                            [category_id] => 10
                            [children] => Array
                                (
                                    [15] => Array
                                        (
                                            [category_name] => cat7
                                            [category_id] => 15
                                            [children] => Array
                                                (
                                                    [18] => Array
                                                        (
                                                            [category_name] => cat10
                                                            [category_id] => 18
                                                        )

                                                    [16] => Array
                                                        (
                                                            [category_name] => cat8
                                                            [category_id] => 16
                                                        )

                                                )

                                        )

                                    [17] => Array
                                        (
                                            [category_name] => cat9
                                            [category_id] => 17
                                        )

                                )

                        )

                )

        )

    [11] => Array
        (
            [category_name] => cat3
            [category_id] => 11
            [children] => Array
                (
                    [13] => Array
                        (
                            [category_name] => cat5
                            [category_id] => 13
                        )

                )

        )

)

參考這個答案,我試圖建立導航菜單使用

function build_nav($category_name, $data)
{
    $result = array();

    foreach ($data as $row)
    {
        if ($row['category_name'] == $category_name)
        {
            $result = "<li>" . $row['category_name'] . "</li>"; 
            $result= build_nav($row['category_name'], $data);
        }
    }
    return $result;
}
$menu="<ul>";
$menu.=build_nav('cat1', $menu_array3);
$menu.="</ul>";
echo "menu <pre>"; print_r($menu); echo "</pre>";

但是我被

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 261900 bytes)

我要求您提出建議來糾正我。 在此先感謝編輯我找到解決方案,直接從DB構建導航菜單https://stackoverflow.com/a/3380296/1528701

出現此錯誤的原因可能是您在foreach循環中調用了函數build_nav()。 這意味着對於數據中的每個值,都會觸發build_nav(),其中將再次觸發foreach循環,依此類推。 因此,主要的答案是:您已經創建了一個無限循環。

我認為您可能會誤解了激發您執行此功能的答案。 在這種情況下,他們使用的是父代ID。 這可能對您的搜索有所幫助。 還要注意,它們沒有像您使用的那樣使用深度嵌套的數組。 好好看看,您會找到解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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