php 文件夹形式菜单,PHP的多级菜单

我有一个这样的主题表:

id

title

parent_id

full_path

full_path用于查找父项为递归.像这样:

+----+-----------+-----------+-----------+

| id | title | full_path | parent_id |

+----+-----------+-----------+-----------+

| 40 | home | 40 | 0 |

| 41 | myhome1 | 41 | 0 |

| 42 | **** | 40-42 | 40 |

| 43 | ***** | 41-43 | 41 |

| 44 | *** | 44 | 0 |

| 45 | **** | 45 | 0 |

| 46 | ***** | 46 | 0 |

| 49 | ****** | 49 | 0 |

| 50 | **** ** | 40-42-50 | 42 |

| 51 | **** ** | 40-42-51 | 42 |

| 52 | **** ** | 40-42-52 | 42 |

| 53 | ******* | 40-53 | 40 |

| 54 | **** | 40-54 | 40 |

| 55 | *** | 41-55 | 41 |

| 56 | **** **** | 40-42-56 | 42 |

| 57 | ******* | 44-57 | 44 |

+----+-----------+-----------+-----------+

我怎么能得到这样的递归数组:

array

(

40 => array

(

42 => array

(

50,51,52,etc.

),

53,

54

)

41 => array

(

43,

55,

),

44 => array

(

57,

),

etc...

)

我可以使用full_path创建多级菜单吗?

解决方法:

您可以使用以下代码执行此操作.请记住,这是有效的,因为您的主题数组将非常小,并且发生的递归将是最小的.不要在大型​​阵列上使用这种方法.

$query = "SELECT id, parent_id FROM subjects";

//execute with your prefered method, eg mysqli

$rows = array();

while($row = $result->fetch_array(MYSQLI_ASSOC))

{

$rows[] = $row;

}

function getChildren($p) {

global $rows;

$r = array();

foreach($rows as $row) {

if ($row['parent_id']==$p) {

$r[$row['id']] = getChildren($row['id']);

}

}

return $r;

}

$final = getChildren(0);

?>

标签:php,arrays,menu,multi-level

来源: https://codeday.me/bug/20190529/1178349.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值