Ich vermute, dass ich hier etwas Dummes mache, aber ich bin verwirrt von dem, was wie ein einfaches Problem mit SPL scheint:Wie ändere ich Array-Schlüssel und Werte bei Verwendung eines RecursiveArrayIterator?
Wie ändere ich den Inhalt eines Arrays (die Werte in diesem Beispiel), mit a RecursiveArrayIterator/RecursiveIteratorIterator?
Mit dem folgenden Testcode kann ich den Wert innerhalb der Schleife mit getInnerIterator() und offsetSet() ändern und das modifizierte Array ausgeben, während ich innerhalb der Schleife bin.
Aber wenn ich die Schleife verlassen und das Array aus dem Iterator ausgeben, ist es wieder auf die ursprünglichen Werte. Was ist los?
$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);
Sieht aus wie dies ein Fehler ist, dass Sie auf http://bugs.php.net/ Datei sollte – null