php 怎么将数组数据构建成树结构

今天看到一段处理从数据库拿出菜单数据构建成树结构的代码,忍不住还是修改了下。他们是这么处理的:

php 复制代码
private function create_node_tree($datas)
{
	$menus=[];
	if($datas)
	{
		$child = [];
		foreach($datas as $key=>$val)
		{
			if($val['status'] == 1 and $val['pid'] == 0)
			{
				$child[$val['id']] = [
					/* 属性赋值  */
					'children'=>[],
				];
			}
		}
		foreach($datas as $key=>$val)
		{
			if(isset($child[$val['pid']]))
			{
				$child[$val['pid']]['children'][$val['id']] = [
					/* 属性赋值  */
					'children'=>[],
				];
				foreach($datas as $k=>$v)
				{
					if(isset($child[$val['pid']]['children'][$v['pid']]))
					{
						$child[$val['pid']]['children'][$v['pid']]['children'][$k] = [
							/* 属性赋值  */
							'children'=>[],
						];
					}
				}
			}
		}

		$child = $this->dealArray($child);
		foreach($child as $key => $cv){
			$child[$key]['children'] = $this->dealArray($cv['children']);
			foreach($child[$key]['children'] as &$ccv){
				$ccv['children'] = $this->dealArray($ccv['children']);
			}
		}
		$menus = $child;
	}

	return $menus ;
}

怎么说呢,这个处理不能说它错了,毕竟人家跑了好久,都过亿流水了。。。

下面是我做了修改的代码:

php 复制代码
private function multi_create_node_tree($datas)
{
	$menus=[];
	if($datas)
	{
		$map = []
		foreach($datas as $key=>$val)
		{
			if($val['status'] == 1)
			{
				$map[$val['id']] = [
					/* 属性赋值  */
					'children'=>[],
				];
			}
		}
		foreach($datas as $key=>$val)
		{
			if($val['pid']==0)
			{
				$menus[] = &$map[$v['pid']];
			}else{
				$map[$val['pid']]['children'][] = $map[$val['id']];
			}
		}
	}

	return $menus;
}

这么改后的好处:

1.扩展了可以多级菜单设置,不再是写死的三层处理

2.性能提升5倍左右

相关推荐
weixin_BYSJ198715 分钟前
springboot鹿邑县旅游网站99312(源码+文档)
java·javascript·spring boot·python·django·flask·php
printfLILEI11 小时前
php中的类与对象以及反序列化
linux·开发语言·php
华科大胡子12 小时前
AI开发者的网络卡点:Anthropic连接超时
开发语言·php
bill328227804313 小时前
AE 的 Animation Composer 描边动效玩法 + 极简 MG 制作流程(含示例)
php·composer
csdn_aspnet16 小时前
PHP 算法 LeetCode 编号 70 - 爬楼梯
算法·leetcode·php
林熙蕾LXL17 小时前
socket编程-TCP开发常用函数
网络协议·tcp/ip·php
m0_7381207217 小时前
渗透测试基础——黑盒测试下的Web漏洞挖掘与利用解析(一)
服务器·前端·网络·安全·php
catchadmin20 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.3.1 发布 后台打包直降 5s 内
开发语言·php
Leweslyh21 小时前
基于 Confucius 架构的无人集群网络控制原语解析
开发语言·网络·php
ylscode1 天前
黑客利用 GHOSTYNETWORKS 和 OMEGATECH 托管 JS 恶意软件基础设施
开发语言·安全·php·安全威胁分析