从字符串到数组到菜单

时间:2015-07-14 09:23:16

标签: php mysql multidimensional-array


我在这样的数据库中有一个列表:

    ID| VAL
    1 | menu1 > submenu1
    2 | menu1 > submenu1 > subsubmenu1
    3 | menu1 > submenu1 > subsubmenu2
    4 | menu1 > submenu1 > subsubmenu3
    5 | menu1 > submenu1 > subsubmenu3 > lastmenu1
    6 | menu2 > submenu1 
    ...

我会用它来生成一个像这样的有序列表:

- menu1
  - submenu1          (a href="#")
    - subsubmenu1     (a href="$id")
    - subsubmenu2     (a href="$id")
    - subsubmenu3     (a href="#")
      - lastmenu1     (a href="$id")
- menu2               (a href="#")
  - submenu1          (a href="$id")

如何使用PHP(以及jQuery,如果需要)实现它? 先感谢您。

1 个答案:

答案 0 :(得分:0)

$a = [
    1 => "menu1 > submenu1",
    2 => "menu1 > submenu1 > subsubmenu1",
    3 => "menu1 > submenu1 > subsubmenu2",
    4 => "menu1 > submenu1 > subsubmenu3",
    5 => "menu1 > submenu1 > subsubmenu3 > lastmenu1",
    6 => "menu2 > submenu1 ",
];

function addMenuItem(&$arr, array $items, $id) {
    $a = &$arr;
    while ($name = array_shift($items)) {
        if (!isset($a[$name])) {
            $a[$name] = [
                'id' => $id,
                'items' => [],
            ];
        }

        $a = &$a[$name]['items'];
    }
}
$menu = [];
foreach($a as $id => $i) {
    $menuItem = explode(' > ', $i);
    addMenuItem($menu, $menuItem, $id);
}
var_dump($menu);