2010-04-22 118 views
2

我试图将平面阵列转换为嵌套阵列,具体取决于每个数组项的“级别”数据。 'level'数据显示当前数组项是孩子,父母还是兄弟姐妹。将平面阵列转换为嵌套阵列

这里是平坦的数组:

$flatArray = array(
    array('title'=>'Page 1', 'level'=>0), 
    array('title'=>'Page 2', 'level'=>0), 
    array('title'=>'Page 3', 'level'=>1), 
    array('title'=>'Page 4', 'level'=>1), 
    array('title'=>'Page 5', 'level'=>2), 
    array('title'=>'Page 6', 'level'=>0), 
    array('title'=>'Page 7', 'level'=>1), 
    array('title'=>'Page 8', 'level'=>0) 
); 

,这里是预期的结果:

$nestedArray = array(
    array('title'=>'Page 1', 'children'=>array()), 
    array('title'=>'Page 2', 'children'=>array(
     array('title'=>'Page 3', 'children'=>array()), 
     array('title'=>'Page 4', 'children'=>array(
      array('title'=>'Page 5', 'children'=>array()) 
     )), 
    )), 
    array('title'=>'Page 6', 'children'=>array(
     array('title'=>'Page 7', 'children'=>array()) 
    )), 
    array('title'=>'Page 8', 'children'=>array()), 
); 

我试着用用数组索引引用,但没有奏效。

回答

3

这有帮助吗?我认为它做的是正确的事情......也许:D对不起,如果没有。

$nestedArray = array(); 

foreach ($flatArray as $key => $value) { 
    $current = &$nestedArray; 
    $level = $value['level']; 
    while ($level > 0) { 
    $last = &$current[count($current) - 1]; 
    $current = &$last['children']; 
    --$level; 
    } 
    $current[] = array('title' => $value['title'], 'children' => array()); 
}