在PHP中迭代数组的最快方法

时间:2009-10-20 20:08:16

标签: php arrays iteration

我正在攻读Zend PHP认证。

不确定这个问题的答案。

  

问题:使用PHP 5迭代和修改数组的每个元素的最佳方法是什么?

     

a)您无法在迭代期间修改数组

     

b)for($i = 0; $i < count($array); $i++) { /* ... */ }

     

c)foreach($array as $key => &$val) { /* ... */ }

     

d)foreach($array as $key => $val) { /* ... */ }

     

e)while(list($key, $val) = each($array)) { /* ... */ }


我的本​​能是(B)因为不需要创建临时变量,所以我意识到它不适用于关联数组。进一步搜索网络发现: 将不变数组计数存储在单独的变量中可以提高性能。

$cnt = count($array);
for ($i = 0; $i < $cnt; $i++) { }

3 个答案:

答案 0 :(得分:20)

从这些选项中,C将是明显的答案。

其余选项(除了A)可以用于实现它,具体取决于括号内的代码,但问题不显示该代码。所以一定是C。

你正在回答错误的问题 - 是的,在for循环之前做count()会提高性能,但这个问题与性能无关。

答案 1 :(得分:10)

您可以使用任何显示的构造迭代和修改数组的每个元素。但有一些注意事项:

b)仅在数组为0到n-1之间的数字数组时才有用。

c)对两种阵列都有用。此外,$value是元素值的引用。因此,更改foreach内的$value也会更改原始值。

d)与c)类似,但$value是值的副本(请注意foreach$array的副本进行操作)。但是使用元素的键,您可以使用$array[$key]访问和更改原始值。

e)像d)。使用$array[$key]访问和更改原始元素。

答案 2 :(得分:3)

SPL将是最好的答案。