通过PHP数组递归并生成数组树作为输出

时间:2015-05-06 00:41:11

标签: php arrays

PHP 5.4

我的代码(基于手册):

<?php
$myArray = array(
    'level_1' => array(
        1,
        'level_2' => array(
            2
        )
    )
);

$iterator = new RecursiveArrayIterator($myArray); 
iterator_apply($iterator, 'traverseStructure', array($iterator)); 

function traverseStructure($iterator) { 
    while ( $iterator -> valid() ) {
        if ( $iterator -> hasChildren() ) {        
            traverseStructure($iterator -> getChildren());            
        } 
        else { 
            echo $iterator -> key() . ' : ' . $iterator -> current() ."</br>";    
        } 
        $iterator -> next(); 
    } 
} 

这是我的输出:

0 : 1
0 : 2

以下是我想看到的内容:

level_1 : 0 : 1
level_1 : level_2 : 0 : 2

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

说明: 你不能在不传递parent_iterator的情况下达到你想要的效果,所以修改traverseStructure()来满足它。

代码:

<?php
$myArray = array(
    'level_1' => array(
        1,
        'level_2' => array(
            2
        )
    )
);

$iterator = new RecursiveArrayIterator($myArray); 
iterator_apply($iterator, 'traverseStructure', array($iterator, '')); 

function traverseStructure($iterator, $parent_iterator) {
    while ( $iterator->valid() ) {

        // If the parent is available, print out the key also
        if ($parent_iterator) {
            echo $parent_iterator->key().' : ';
        }

        if ( $iterator->hasChildren() ) {
            traverseStructure($iterator->getChildren(), $iterator);
        } 
        else { 
            echo $iterator->key() . ' : '.$iterator->current() . "<br>";
        }
        $iterator->next();
    }
}

?>

输出:

level_1 : 0 : 1<br>level_1 : level_2 : 0 : 2<br>