$arrResult=array(
0=>array('categoryid'=>112,'catname'=>'apperal','subcategory'=>array(
412=>array('categoryid'=>428,'catname'=>'rainwear','subcategory'=>array(
428=>array('categoryid'=>413,'catname'=>'summer','subcategory'=>array()))))));
print_r($arrResult);
$iterator = new RecursiveArrayIterator($arrResult);
iterator_apply($iterator, 'traverseStructure', array($iterator));
function traverseStructure($iterator) {
$arrAddResult=array('categoryid'=>416,'catname'=>'winter','subcategory'=>array());
while ($iterator -> valid()) {
if ($iterator -> hasChildren()) {
traverseStructure($iterator -> getChildren());
}
else {
if($iterator -> current() == 413)
{
$arr=&$iterator;
$a='arr';
${$a}['subcategory']=$arrAddResult;
break;
}
}
$iterator -> next();
}
}
预期的输出是在$ arrResult中追加'arrAddResult'appenedn。但由于某种原因,迭代器得到修改,但它并不反映arrResult数组中的修改。添加/修改php n级关联阵列
我试着在函数'traverseStructure'中通过ref传递数组,但仍然在努力获得正确的输出。
我想先迭代器。我必须构造一个N层关联数组作为arrResult,因此可以选择使用迭代器。
我不认为迭代器在这里最好用,如果我理解该代码的逻辑。这是您使用它的实际场景吗? – Khez 2011-04-15 04:03:34
问题:我必须构造关联数组的N-嵌套级别。 '$ arrResult'数组是嵌套的关联数组。我想添加$ arrAddResult作为$ arrResult的一部分。 $ arrAddResult的父类是类别ID 413. 我认为Iterator会帮助我递归地走数组,当我找到匹配键时,我会将$ arrAddResult追加到$ arrResult。 如果还有其他的方法来执行这个请分享 – user269867 2011-04-15 06:20:15
如果你所有的迭代器都是找到结尾数组,那么找到最后一个孩子的函数是不是更适合?你打算如何使用它?我强烈地感到在这种情况下不使用迭代器。 – Khez 2011-04-15 06:42:22