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

joa*_*him 18 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';
}
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 13

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

foreach ($array as &$value) {
  $value['foo'] = 'bar';
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它没有通过引用传递,它避免了读取时的副本.`foreach`创建数组元素的副本,但是如果在引用运算符之前 - 它不会这样做.因此,foreach变得更快,PHP使用更少的内存. (3认同)
  • 记住在终止循环后取消设置($ value) (3认同)
  • 我不明白这个答案与这里有什么关系。这很有趣,但不适用于这个问题,因为在这里您只获得了数组的值,而不是键。 (2认同)