更快地在foreach statemnt中使用array_keys()或设置一个从未使用过的值变量?

时间:2012-01-11 15:39:37

标签: php performance

假设我想迭代一个数组,或者我从不查看值,或者我在其中设置内容,所以我只想要键。哪个更快:

// Set a variable each iteration which is unused.
foreach ($array as $key => $value) {
  $array[$key]['foo'] = 'bar';
}

// Call array_keys() before iterating.
foreach (array_keys($array) as $key) {
  $array[$key]['foo'] = 'bar';
}

2 个答案:

答案 0 :(得分:13)

我认为这也可以,也可能更快:

foreach ($array as &$value) {
  $value['foo'] = 'bar';
}

更新:我做了一点测试,似乎这更快。 http://codepad.org/WI7Mtp8K

答案 1 :(得分:2)

暂且不说第二个例子是人为的。意思是,正如 Ashley Banks 所指出的那样,你为什么会这样做

第一个例子是两者的表现更为出色。第二个是对array_keys()的附加函数调用的开销。

查看PHP Benchmark以获取其他性能测试。如有疑问,请自行使用microtime()进行基准测试。