我正试图根据每个条目的值创建一个数组中的数组结构,但我真的不知道该如何处理。
我希望SO的人能帮助我有效地实现这一目标。
到目前为止,我一直在尝试:为父母安排孩子,然后为每个孩子做同样的事情。
输入:
array(
array('value' => 0),
array('value' => 4),
array('value' => 4),
array('value' => 8),
array('value' => 0),
array('value' => 4)
)
所需输出
array(
array('value' => 0
'children' => array(
array('value' => 4),
array('value' => 4
'children' => array(
array('value' => 8)
)
)
)
),
array('value' => 0
'children' => array(
array('value' => 4)
)
)
)
如果有任何想法,我将不胜感激。我正在考虑一种递归方法来实现这一点,但我不知道如何正确地做到这一点。
提前非常感谢!
function doit(&$a , &$i)
{
$myval = $a[$i++]['value'];
$chld = array();
while( isset($a[$i]) && $a[$i]['value']>$myval )
{
$chld[]=doit($a ,$i);
}
if(count($chld)>0)
return array('value'=>$myval,'children'=>$chld);
else
return array('value'=>$myval);
}
$a = array(
array('value' => 0),
array('value' => 4),
array('value' => 4),
array('value' => 8),
array('value' => 0),
array('value' => 4)
);
$i=0;
$result = array();
while(isset($a[$i]))
$result[] = doit($a,$i);
print_r($result);
请注意,指针$i是作为引用传递的,这意味着它在所有递归调用中都是同一个变量,总是指向下一个未处理的记录。
一次运行doit()函数将处理它的一个值,然后(只要有子候选者)将为它的每个子递归地调用它自己。