【问题标题】:foreach( ... ) key on only - is array_keys(...) the most efficient?foreach( ... ) 仅打开键- array_keys(...) 是最有效的吗?
【发布时间】:2014-11-29 06:20:42
【问题描述】:

如果我有类似的代码:

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

我有 2 个问题

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

【问题讨论】:

  • 不,array_keys() 仅被调用一次,然后 foreach 迭代来自该单个调用的返回值,但该返回暂时使用 PHP 内存,直到循环终止:从速度上讲它肯定更快,但是如果您的内存真的很紧,请不要将它与大型数组一起使用

标签: php arrays


【解决方案1】:

1.) 如果array_keys($array) 会在每次迭代中被评估,那么我认为你上次所在的位置不会被记住,因为array_keys() 会返回一个新的每次都带有键的数组,而且在性能方面真的很糟糕,所以没有。这适用于所有计算为某种形式的可迭代的表达式,并出现在 foreach 的第一部分。

2.) 如果您对整个数组进行迭代,则会发生以下情况:

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

b) foreach 循环是一种语言结构(可能优化得更好),没有额外的查找,每次迭代都会得到键和值,所以我认为它会更快。

希望对你有帮助,如果我错了,请纠正我!

【讨论】:

    【解决方案2】:

    1 - 使用所有数组时更快 2 - 需要“找到”一些关键并打破时更快

    【讨论】:

    • 你确定吗?你有什么资源(比如对应的源码)可以证明吗?你怎么知道的?
    • 对不起,我不太明白,“使用所有数组时更快”,你是什么意思?有什么理由让您说它更快?
    • 很简单,我只是测试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多