从数组生成菜单和子菜单

时间:2014-02-14 10:54:51

标签: php arrays

从昨天开始一直在努力,今天终于接近实现它了。

问题

我的PHP脚本挂起,我的意思是它似乎循环无限,导致脚本挂起。他们在数据库中只有11条记录。

此函数遍历从generate_module函数传递的数据数组,并生成菜单和子菜单

function module_keys($array = array(), $modules_parent = 0){
    echo '<ul class="nav navbar-nav side-nav">';
    foreach($array as $item){
        echo '<li>';
        echo '<a>';
        echo $item->modules_name;
        echo '</a>';
        module_keys($array, $item->modules_id);
        echo '</li>';
    }
    echo '</ul>';
}

此函数查询数据库并将结果存储在数组中,然后传递给module_keys以生成菜单和子菜单。

function generate_module(){
    global $db;
    $array = array();
    $sql = "SELECT * FROM module";
    $query = $db->SELECT($sql);
    $array = $db->ROWS();
    module_keys($array, $modules_parent = 0);
}

这是数据库结构

enter image description here

1 个答案:

答案 0 :(得分:1)

问题在于:

    echo '</a>';
    module_keys($array, $item->modules_id);
    echo '</li>';
}

对modules数组的第二次调用是将原始数组传递给module_keys函数,导致它永远循环。存储子菜单项的数组中的位置,因为您需要将其传递给第二个函数调用。

您真正需要做的是获取每个子菜单项并将它们分配给原始数组。

function generate_module(){
    global $db;
    $array = array();
    $sql = "SELECT * FROM module";
    $query = $db->SELECT($sql);
    $array = $db->ROWS();

    //iterate over the menu items and get each of the child menu items
    //add them into the original array then pass that
    $newArray = array();
    foreach($array as $menuItem) {
        $submenu = //some additional query to collect the data
        $temp = array();
        $temp = $menuItem;
        $temp['submenu'] = $submenu;
    }

    module_keys($newArray, $modules_parent = 0);
}

然后你需要确保module_keys中的函数调用传递子数组元素,以便可以构造子菜单。

像:

module_keys($item['submenu'], $item->modules_id);

我希望这会有所帮助

请注意 我已经使用了数组,但看起来你正在使用对象,你可能需要将我建议的内容转换为一个对象,这样它看起来就像你正在做的那样