Ben burada aptal bir şey yapıyorum sanıyorum, ama ben SPL ile basit bir sorun gibi görünüyor ne kafamı karıştırdı:
Nasıl kullanarak, bir dizi (bu örnekte değerleri) içeriğini modifiye mı a RecursiveArrayIterator / RecursiveIteratorIterator?
Takip test kodu kullanarak, ben getInnerIterator() ve offsetSet() kullanılarak döngü içinde değerini değiştirmez, ve ben döngü içinde olduğum sürece modifiye dizi atabilirsin.
Ben döngü bırakın ve yineleyici gelen dizi dökümü Ama, ne zaman geri orijinal değerlerine bulunuyor. Ne oluyor?
$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);