日期:2014-05-16  浏览次数:20418 次

求一维数组组织为“树形”数组的方法
好吧……问题的名字有点儿扯……
有数组输入如下:

[{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);