基于值比较创建父子数组结构

时间:2014-11-03 11:28:10

标签: php arrays recursion parent-child recursive-datastructures

我正在尝试根据每个条目的值创建一个数组中的数组结构,我真的不知道应该如何处理它。

我希望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)
      )
  )
)

我很欣赏任何想法。我正在考虑一种递归方法来实现这一点,但我不知道如何正确地做到这一点。

非常感谢你!

1 个答案:

答案 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()函数的一次运行将处理其中的一个值,然后(只要有一个子候选者)将为其每个子项递归调用自身。