【问题标题】:Fastest way to iterate an array in PHP在 PHP 中迭代数组的最快方法
【发布时间】:2009-10-20 20:08:15
【问题描述】:

我正在为Zend PHP certification学习。

我不确定这个问题的答案。

问题:使用 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++) { }

【问题讨论】:

    标签: php arrays iteration


    【解决方案1】:

    从这些选项中,C 将是显而易见的答案。

    其余选项(除了 A)可能用于实现这一点,具体取决于括号内的代码,但问题 显示该代码。所以一定是C。

    而且你回答错了问题——是的,在 for 循环之前执行 count() 会提高性能,但这个问题与性能无关。

    【讨论】:

    • “使用 PHP 5”部分也可能是一个提示。 b),d),e) 在 php4 中是可能的,但 c) 不是。诚然,这是微弱的证据,但考试问题通常以这种方式工作;-) 由于您需要另一个表查找来访问 b,d,e 的元素,因此 c) 显然是“最好的”方式(给定选择)。该手册还指出这不适用于foreach(array(1,2,3) as &amp;$v),可遍历必须是变量。
    【解决方案2】:

    您可以使用任何显示的构造迭代和修改数组的每个元素。但有一些注意事项:

    b) 仅当数组是键从 0 到 n-1 的数值数组时才有用。

    c) 对这两种数组都很有用。此外,$value 是元素值的引用。所以在foreach里面改变$value也会改变原来的值。

    d) 与 c) 类似,除了 $value 是值的副本(请注意,foreach$array 的副本进行操作)。但是使用元素的键,您可以使用$array[$key] 访问和更改原始值。

    e) 喜欢 d)。使用$array[$key] 访问和更改原始元素。

    【讨论】:

      【解决方案3】:

      SPL 将是这里的最佳答案。

      【讨论】:

      • SPL 不能解决问题。即使它可以作为答案,我们说的是循环,而不是循环的 Traversable。
      • SPL 是“标准 PHP 库”。你能详细说明你的答案吗?这如何回答这个问题?
      • 我同意彼得的观点。不尝试演示实现的仅链接提示在 Stack Overflow 的“早期”中非常常见。我觉得他们都应该转移到问题下的评论中。
      猜你喜欢
      • 2023-02-06
      • 2017-03-28
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2023-04-11
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多