Похоже, я не могу перебирать по ссылке над значениями в 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);
$spl = new SplFixedArray(10); foreach ($spl as $key => $value) { $spl[$key] = "string"; } var_dump($spl);
Согласно документам, единственным преимуществом splfixedarray () является то, что он быстрее обычного массива. Но я не помню, чтобы кто-то ссылался на массив как медленный. Поэтому лучше всего перейти на обычный массив.