PHP动态下拉菜单
情况如下: 我有一个菜单,需要从数据库中动态创建。 菜单层次结构由表中的“父”列确定(每个条目都有一个父项,如果它只是父项,则为NULL) 问题是,考虑到我的下拉菜单需要适当的结构,我想不出如何动态地执行此操作。 这要求我在父页面的foreach中有我的子页面的foreach? 如果这有道理,有解决办法吗 仅供参考:我正在处理的阵列返回:PHP动态下拉菜单,php,menu,drop-down-menu,Php,Menu,Drop Down Menu,情况如下: 我有一个菜单,需要从数据库中动态创建。 菜单层次结构由表中的“父”列确定(每个条目都有一个父项,如果它只是父项,则为NULL) 问题是,考虑到我的下拉菜单需要适当的结构,我想不出如何动态地执行此操作。 这要求我在父页面的foreach中有我的子页面的foreach? 如果这有道理,有解决办法吗 仅供参考:我正在处理的阵列返回: array(31) { [0]=> array(5) { ["id"]=> string(2) "31" ["title"]=&g
array(31) {
[0]=> array(5)
{ ["id"]=> string(2) "31" ["title"]=> string(4) "Home" ["linkable"]=> string(1) "1" ["parent"]=> NULL ["override"]=> string(1) " " }
[1]=> array(5)
{ ["id"]=> string(2) "30" ["title"]=> string(11) "Shop Online" ["linkable"]=> string(1) "1" ["parent"]=> string(2) "31" ["override"]=> string(4) "shop" }
and on and on.
您需要编写一个递归函数来实现这一点,并让它自己调用。我还没有测试过这个,但我认为它应该让你开始。我不会认可这个函数的效率,因为它会遍历数组中的每一项并进行比较,即使每次运行只需要一两项(可能) PHP:
不需要递归
$parents = array();
$noparents = array();
foreach ($results as $ar) {
if ( $ar['parent'] != NULL ) {
$parents[$ar['parent']] = array();
array_push($parents[$ar['parent']], $ar['title']);
} else {
array_push($noparents, $ar['title']);
}
}
现在,在以父项命名的数组中列出了属于父项的所有链接。其他链接位于单独的数组中。如果你愿意,你可以加入他们
根据应用程序的需要对其进行扩展。插入所有内容后,我只列出了没有子页面的父页面。现在再看一下,我忘了在函数中的output_lis()调用周围加一个
- 。请参阅已编辑的解决方案…输出的仍然是父级。源代码仅显示包装菜单的
- ,但仅显示父元素为NULL的元素的
- s。从好的方面来说,我相信您。另一方面,我用一些我已经使用过的函数解决了这个问题。但是,使用递归函数的方式几乎相同。这是否足够灵活,可以处理三层菜单?在某些情况下,我有第1页->第2页->第3页。这里有一个缺陷:第一次没有为$parents[$ar['parent']]定义数组,所以数组推送无法工作。我相信您可以使它足够灵活。这只是一个简单的例子。
<ul> <?php echo output_lis(); ?> </ul>
$arr = array( array('title'=>'home','parent'=>NULL,'id'=>1), array('title'=>'sub1','parent'=>1,'id'=>2), array('title'=>'sub2','parent'=>1,'id'=>3), array('title'=>'about us','parent'=>NULL,'id'=>4), array('title'=>'sub3','parent'=>4,'id'=>5), array('title'=>'sub4','parent'=>4,'id'=>6), );
$parents = array(); $noparents = array(); foreach ($results as $ar) { if ( $ar['parent'] != NULL ) { $parents[$ar['parent']] = array(); array_push($parents[$ar['parent']], $ar['title']); } else { array_push($noparents, $ar['title']); } }
- 和在中创建的