简体   繁体   English

建立递归导航菜单php

[英]build recursive navigation menu php

To build dynamic navigation menu, I've run the query 要构建动态导航菜单,我运行了查询

select `category_id`,`category_name`,`parent_category_id`,`sort_order` from `item_category` 

and I get the result 我得到结果

Array
(
    [0] => Array
        (
            [category_id] => 9
            [category_name] => cat1
            [parent_category_id] => 0
            [sort_order] => 0
        )

    [1] => Array
        (
            [category_id] => 11
            [category_name] => cat3
            [parent_category_id] => 0
            [sort_order] => 0
        )

    [2] => Array
        (
            [category_id] => 15
            [category_name] => cat7
            [parent_category_id] => 10
            [sort_order] => 0
        )

    [3] => Array
        (
            [category_id] => 17
            [category_name] => cat9
            [parent_category_id] => 10
            [sort_order] => 1
        )

    [4] => Array
        (
            [category_id] => 13
            [category_name] => cat5
            [parent_category_id] => 11
            [sort_order] => 0
        )

    [5] => Array
        (
            [category_id] => 16
            [category_name] => cat8
            [parent_category_id] => 15
            [sort_order] => 0
        )

    [6] => Array
        (
            [category_id] => 10
            [category_name] => cat2
            [parent_category_id] => 9
            [sort_order] => 1
        )

    [7] => Array
        (
            [category_id] => 12
            [category_name] => test5
            [parent_category_id] => 9
            [sort_order] => 0
        )

)

I tried to build navigation bar out of it by 我试图通过它来构建导航栏

function create_array($number, $data)
{
    $result = array();
    foreach ($data as $row)
    {
        if ($row['parent_category_id'] == $number)
        {
            $result[$row['category_id']] = create_array($row['category_id'], $data);

        }
    }
    return $result;
}
$menu_array=create_array(0, $all_categories);
echo "menu_array<pre>"; print_r($menu_array); echo "</pre>";

It has perfectly build menu like this 它具有这样的完美构建菜单

Array
(
    [9] => Array
        (
            [10] => Array
                (
                    [15] => Array
                        (
                            [16] => Array
                                (
                                )

                        )

                    [17] => Array
                        (
                        )

                )

            [12] => Array
                (
                )

        )

    [11] => Array
        (
            [13] => Array
                (
                )

        )

)

My problem now is I don't understand how to do the sorting in create_array function using sort_order and also retrieve how to retrieve category_name from through create_array function recursion. 我现在的问题是我不了解 如何使用 sort_ordercreate_array函数中进行排序,以及 如何通过create_array函数递归来检索如何检索category_name

EDIT: Thanks @user3091574 I was sorting by parent_category_id earlier for some other reason, for now to make it simple taking your suggestion, now i want to retrieve category_name and build <ul> out of it! 编辑:谢谢@ user3091574我由于其他一些原因在较早的时候按parent_category_id进行了排序,现在为了简化您的建议,现在我想检索category_name并从中构建<ul> any suggestions? 有什么建议么?

EDIT-2 I found solution to build navigation menu at https://stackoverflow.com/a/3380296/1528701 EDIT-2我在https://stackoverflow.com/a/3380296/1528701中找到了构建导航菜单的解决方案

for sorting: 用于排序:

add order by sort_order DESC in your query 在查询中按sort_order DESC添加订单

For adding catogary 用于添加分类

function create_array($number, $data)
{
    $result = array();

    foreach ($data as $row)
    {
        if ($row['parent_category_id'] == $number)
        {
            $result[$row['category_id']]['category_name']=$row['category_name'];
            $result[$row['category_id']]['id']= create_array($row['category_id'], $data);

        }
    }
    return $result;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM