Ho il sospetto che sto facendo qualcosa di stupido qui, ma sono confuso da quello che sembra un problema semplice con SPL:Come si alterano le chiavi ei valori dell'array mentre si utilizza RecursiveArrayIterator?
Come faccio ho modificato il contenuto di un array (i valori in questo esempio), utilizzando un RecursiveArrayIterator/RecursiveIteratorIterator?
Utilizzando il seguente codice di test, è possibile modificare il valore all'interno del loop utilizzando getInnerIterator() e offsetSet() e scaricare l'array modificato mentre sono all'interno del ciclo.
Ma quando esco dal ciclo e scarico la matrice dall'iteratore, si torna ai valori originali. Cosa sta succedendo?
$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);
Sembra questo un bug si dovrebbe file sul http://bugs.php.net/ – null