Maison >développement back-end >tutoriel php >求一维数组组织为“树形”数组的方法
好吧……问题的名字有点儿扯……
有数组输入如下:
[{id=>'00'},{id=>'01'},{id=>'22'},{id='0001'},{id=>'2234'}]
[{id=>'00',children=>{{id=>'0001'}} },{id=>'01',children=>{} },{id=>'22',children=>{{id=>'2234'}} }]
建立一个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; } } }}