求一维数组机关为“树形”数组的方法
程序员文章站
2024-02-16 23:44:28
...
求一维数组组织为“树形”数组的方法
好吧……问题的名字有点儿扯……
有数组输入如下:
现在想将这个数组组织为以下形式:
其中的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放到该放的地方
好吧……问题的名字有点儿扯……
有数组输入如下:
[{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 {
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);
相关文章
相关视频