我正在尝试根据每个条目的值创建一个数组中的数组结构,我真的不知道应该如何处理它。
我希望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)
)
)
)
我很欣赏任何想法。我正在考虑一种递归方法来实现这一点,但我不知道如何正确地做到这一点。
非常感谢你!
答案 0 :(得分:1)
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()函数的一次运行将处理其中的一个值,然后(只要有一个子候选者)将为其每个子项递归调用自身。