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
有什么想法吗?
答案 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>