求一维数组组织为“树形”数组的方法

php中文网
发布: 2016-06-23 14:01:46
原创
1215人浏览过

好吧……问题的名字有点儿扯……
有数组输入如下:

[{id=>'00'},{id=>'01'},{id=>'22'},{id='0001'},{id=>'2234'}]
登录后复制

现在想将这个数组组织为以下形式:
[{id=>'00',children=>{{id=>'0001'}} },{id=>'01',children=>{} },{id=>'22',children=>{{id=>'2234'}} }]
登录后复制

其中的id是字符串,位数为双数位(2、4、6、8……),除了2位的id之外,其余位数的id总能找到上一级id(即元素A:2234必然能找到id为22【也就是left( 0,len(A[id])-2 )】的元素
虽然多次遍历也可行,但想能实现以下功能:
1、能正确地进行组织
2、每一次组织之后,原始数组会减少,比如第一次将2位的都处理了,那么在原始数组中id位数为2的其实就没有必要了,就全部unset
求教啊~


回复讨论(解决方案)

建立一个2维数组 array[id][child] 遍历一次原始数组就可以了
遇到两位的判断是否存在 不存在就插入 遇到不是两位的就认为是child放到该放的地方

$a = array('4401','00','0001','0002','22','2201');		$b = array();		for($i = 0; $i < count($a); $i++)		{		    if(strlen($a[$i]) == 2)		    {		        if(!array_key_exists($a[$i],$b))		        {		        		$b[$a[$i]] = array();		      	}			    }		    else		    {		        $id = substr($a[$i], 0, 2);		        if(isset($b[$id]))		        {				        if(!in_array($a[$i], $b[$id]))				        {				           $b[$id][] = $a[$i];					        }		      	}		      	else		      	{		      			$b[$id] = array();		      			$b[$id][] = $a[$i];    			      	} 			    }			}		print_r($b);
登录后复制

昨天自己写的代码,测试可用未优化,但是用了后发现在实际存在中存在问题,所以放弃这种一次性读取全部数据然后后台组织的方式了。

function sort_dep($deps){	//将无序的dep组合成为有序的树状结构	$step=2;	$start=1;	$res=array();	for($start=1;$start<5;$start++){		//大循环,即要处理的是第几级的数据		foreach($deps as $k => $v){			if(strlen($v['id'])==($start*$step)){				put_dep($res,$v);				unset($deps[$k]);			}		}			}	return $res;}function put_dep(&$res,$v){	//将数组放入到$res中去	$i=strlen($v['id']);	if($i==2){		$res[]=$v;	}else{		//需要查找是在什么下面的		$prefix=substr($v['id'],0,$i-2);				foreach($res as $key=>&$value){			if($value['id']==$prefix){				$value['children'][]=$v;   //children需在前面设置				return true;			}		}	}}
登录后复制

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号