搜索
系统检测到您的用户名不符合规范:

php 无级别递归调用菜单展示

浏览:702 发布日期:2019年09月29日 分类:基础算法 关键字: php 无级别 递归 树形菜单
无级别递归调用,应用场景:菜单列表。如有父级,归属父级下,无归属父级。展示为父级(有不严谨的地方请指出)
public function test() {
$dataList = [
['parent_id' => '0', 'id' => '1', 'title' => '父1'],
['parent_id' => '3', 'id' => '2', 'title' => '孙4-4'],
['parent_id' => '4', 'id' => '3', 'title' => '子4-3'],
['parent_id' => '0', 'id' => '4', 'title' => '父4'],
];
$new_level = [];
foreach ($dataList as $v) {
$tmp_level = $this->buildLevel($v, $new_level);
$new_level = $tmp_level['data'];
if (!empty($tmp_level['tmp'])) {
$new_level[] = $tmp_level['tmp'];
}
}
print_r($new_level);
}
public function buildLevel($target, $source) {
$target['children'] = [];
$rtn_data = [];
$source_data = $source;
$find = false;
$parent_key = 0;
$find_parent = false;
$find_child = false;
$children_data = [];
foreach ($source as $k => $v) {
if ($v['id'] == $target['parent_id']) {
$find_parent = true;
$find = true;
$parent_key = $k;
} else if ($v['parent_id'] == $target['id']) {
$target['children'][] = $v;
unset($source_data[$k]);
$find_child = true;
$find = true;
} else if (!empty($v['children'])) {
$tmp = $this->buildLevel($target, $v['children']);
$source_data[$k]['children'] = $tmp['data'];
if (empty($tmp['tmp'])) {
$find = true;
}
}
}
if ($find_parent) {
$source_data[$parent_key]['children'][] = $target;
} else if ($find_child) {
$source_data[] = $target;
}
$rtn_data['data'] = $source_data;
if (!$find) {
$rtn_data['tmp'] = $target;
}
return $rtn_data;
}
显示:Array
(
[0] => Array
(
[parent_id] => 0
[id] => 1
[title] => 父1
[children] => Array
(
)

)

[3] => Array
(
[parent_id] => 0
[id] => 4
[title] => 父4
[children] => Array
(
[0] => Array
(
[parent_id] => 4
[id] => 3
[title] => 子4-3
[children] => Array
(
[0] => Array
(
[parent_id] => 3
[id] => 2
[title] => 孙4-4
[children] => Array
(
)

)

)

)

)

)

)
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
EoneLiu
积分:1349 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /