仅使用foreach(...)键 - array_keys(...)效率最高?

时间:2014-10-04 10:03:05

标签: php arrays

如果我有一些代码:

foreach(array_keys($array) as $key) 
{
  // work with the array
}

我有两个问题

  1. 是否为foreach(...)的每次迭代调用了array_keys(...)?效率很高吗?
  2. 如果我要比较速度和内存,上面的代码是比上面更快/更有效的代码 foreach($ array as $ key => $ data)
    {
    //仅使用$ key }

2 个答案:

答案 0 :(得分:1)

1。)如果在每次迭代中都会评估array_keys($array),那么我不会想到,您可能会记住上一次的位置,因为{{1每次都会返回一个带有键的新数组,加上它在性能方面会非常糟糕,所以没有。这适用于所有表达式,它们评估为某种形式的可迭代,并且位于array_keys()的第一部分。

2。)如果你对整个数组进行迭代,那么会发生以下情况:

a) foreach首先从数组中提取所有键,这是array_keys()List的混合(如果您熟悉的话)使用java或一些强类型的oo语言),它可能非常快或非常慢,具体取决于数组内部结构和Hashmap方法的实现。然后,如果迭代数组,则需要在每次迭代中进行查找,例如array_keys,这也需要一些时间,尤其是字符串键。

b) $value = $array[$currentlyIteratedKey];循环是一种语言构造(可能更好地优化),并且没有额外的查找,您在每次迭代中都获得了密钥和值,所以我认为它会更快。

希望它有所帮助,如果我错了,请纠正我!

答案 1 :(得分:-1)

1 - 使用所有阵列时速度更快 2 - 当需要“找到”某个键并中断

时更快