Je pense que je fais quelque chose de stupide, mais je suis confus par ce qui semble être un problème simple avec SPL:Comment modifier les clés et les valeurs de tableau lors de l'utilisation d'un objet RecursiveArrayIterator?
Comment puis-je modifié le contenu d'un tableau (les valeurs dans cet exemple), en utilisant un RecursiveArrayIterator/RecursiveIteratorIterator? En utilisant le code de test suivant, je peux modifier la valeur dans la boucle en utilisant getInnerIterator() et offsetSet(), et vider la matrice modifiée pendant que je suis dans la boucle. Mais quand je quitte la boucle et vide la matrice de l'itérateur, je reviens aux valeurs d'origine. Que ce passe-t-il?
$aNestedArray = array();
$aNestedArray[101] = range(100, 1000, 100);
$aNestedArray[201] = range(300, 25, -25);
$aNestedArray[301] = range(500, 0, -50);
$cArray = new ArrayObject($aNestedArray);
$cRecursiveIter = new RecursiveIteratorIterator(new RecursiveArrayIterator($cArray), RecursiveIteratorIterator::LEAVES_ONLY);
// Zero any array elements under 200
while ($cRecursiveIter->valid())
{
if ($cRecursiveIter->current() < 200)
{
$cInnerIter = $cRecursiveIter->getInnerIterator();
// $cInnerIter is a RecursiveArrayIterator
$cInnerIter->offsetSet($cInnerIter->key(), 0);
}
// This returns the modified array as expected, with elements progressively being zeroed
print_r($cRecursiveIter->getArrayCopy());
$cRecursiveIter->next();
}
$aNestedArray = $cRecursiveIter->getArrayCopy();
// But this returns the original array. Eh??
print_r($aNestedArray);
on dirait que c'est un bug, vous devez déposer sur http://bugs.php.net/ – null