Использование foreach с SplFixedArray

Похоже, я не могу перебирать по ссылке над значениями в SplFixedArray:

$spl = new SplFixedArray(10); foreach ($spl as &$value) { $value = "string"; } var_dump($spl); 

Выходы:

 Fatal error: Uncaught exception 'RuntimeException' with message 'An iterator cannot be used with foreach by reference' 

Любое обходное решение?

Любое обходное решение?

Короткий ответ: не перебирайте по ссылке. Это исключение, вызванное почти всеми итераторами PHP (исключений из этого исключения очень мало); это не что-то особенное для SplFixedArray .

Если вы хотите повторно назначить значения в цикле foreach , вы можете использовать ключ так же, как с обычным массивом. Я бы не назвал это обходным путем, поскольку это правильный и ожидаемый метод.


Оригинал: плохой

 $spl = new SplFixedArray(10); foreach ($spl as &$value) { $value = "string"; } var_dump($spl); 

Назначить ключ: good

 $spl = new SplFixedArray(10); foreach ($spl as $key => $value) { $spl[$key] = "string"; } var_dump($spl); 

Согласно документам, единственным преимуществом splfixedarray () является то, что он быстрее обычного массива. Но я не помню, чтобы кто-то ссылался на массив как медленный. Поэтому лучше всего перейти на обычный массив.