【问题标题】:From string to array to menu从字符串到数组再到菜单
【发布时间】:2015-07-14 09:23:15
【问题描述】:


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

身份证|价值 1 |菜单 1 > 子菜单 1 2 |菜单 1 > 子菜单 1 > 子菜单 1 3 |菜单 1 > 子菜单 1 > 子菜单 2 4 |菜单 1 > 子菜单 1 > 子菜单 3 5 | menu1 > submenu1 > subsubmenu3 > lastmenu1 6 |菜单 2 > 子菜单 1 ...

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

- 菜单1 - 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)来实现它?
先感谢您。

【问题讨论】:

  • 你能贴出尝试过的代码吗?
  • 我没有工作代码...对不起!
  • 我认为以这种方式制作菜单是一个糟糕的解决方案。您最好添加另一列,例如 parent_id,其中包含父 ID。然后你迭代每一行where id = parent_id recursivly。 Menu 1 (id: 1), submenu (id: 2, parent_id: 1), subsubmenu 1 (id: 3, parent_id: 2), subsubmenu 2 (id: 4, parent_id: 2), lastmenu1 (id: 5, parent_id: 3)
  • 是的,我知道...但我的想法是使用从外部 xml 提要开始的自动化来创建(并通过 CRON 每天更新)菜单,其中类别以这种可怕的模式格式化。

标签: php mysql multidimensional-array


【解决方案1】:
$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);

【讨论】:

  • 谢谢...这是一个好的开始!现在我只需要将 ID 引用添加到每个字符串的最后一个节点!
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2012-08-02
  • 2014-05-01
  • 1970-01-01
  • 2019-11-23
相关资源
最近更新 更多