我正在攻读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++) { }
答案 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将是最好的答案。