建立一个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);

解决方案 »

  1.   

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