使用带有SplFixedArray的foreach

时间:2014-04-08 16:26:02

标签: php spl

似乎我不能通过引用迭代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'

任何解决方法?

2 个答案:

答案 0 :(得分:6)

  

任何解决方法?

简短回答:不要按引用进行迭代。这是几乎所有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);

答案 1 :(得分:0)

根据文档,splfixedarray()的唯一优势是它比普通数组更快。但我不记得有人提到阵列的速度很慢。因此,您最好的解决方案可能是切换到常规阵列。