构建递归导航菜单列表

时间:2014-05-02 06:48:58

标签: php recursion menu

$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
                        )

                )

        )

)

引用this answer我尝试使用

构建导航菜单
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

构建导航菜单的解决方案

1 个答案:

答案 0 :(得分:0)

出现此错误的原因可能是您在foreach循环中调用了函数build_nav()。这意味着对于数据中的每个值,build_nav()将被触发,其中foreach循环将再次被触发,依此类推。 所以主要答案是:你创造了一个无限循环。

我想你可能误解了启发你这个功能的答案。在这种情况下,他们使用父ID。这可以帮助您进行搜索。另请注意,它们不像您使用的那样使用深度嵌套的数组。好好看看,你会找到解决方案。