PHP中如何使用foreach循环实现数组元素的复制操作?
- 内容介绍
- 相关推荐
本文共计1054个文字,预计阅读时间需要5分钟。
PHP的foreach是一个简洁且高效的循环结构。尽管有些人认为它可能较慢,但实际上,一个常见的原因是foreach会复制迭代数组的键。因此,有人建议使用:$keys=;
PHP的foreach是一个非常整洁和切中要害的语言结构。仍然有些人不喜欢使用它,因为他们认为它是缓慢的。一个通常命名的原因是foreach复制它迭代的数组。
因此,一些人建议写:
$keys = array_keys($array); $size = count($array); for ($i = 0; $i < $size; $i++) { $key = $keys[$i]; $value = $array[$key]; // ... }
而不是更直观和直接:
foreach ($array as $key => $value) { // ... }
这里有两个问题:
Microoptimization是不好的。通常,它只会浪费您的时间,不会带来任何可度量的性能改进。
foreach的复制行为比大多数人认为的要复杂一些。通常情况下,“优化”的版本会比原始版本慢。
foreach什么时候复制?
foreach是否复制数组以及复制的数量取决于三件事:
是否引用了迭代数组、它的refcount有多高以及迭代是否通过引用完成。
没有引用,refcount == 1
在下面的代码中,$array没有被引用,并且refcount为1。在这种情况下,foreach不会复制数组(证明)——这与流行的观点相反,即foreach总是复制没有引用的迭代数组。
本文共计1054个文字,预计阅读时间需要5分钟。
PHP的foreach是一个简洁且高效的循环结构。尽管有些人认为它可能较慢,但实际上,一个常见的原因是foreach会复制迭代数组的键。因此,有人建议使用:$keys=;
PHP的foreach是一个非常整洁和切中要害的语言结构。仍然有些人不喜欢使用它,因为他们认为它是缓慢的。一个通常命名的原因是foreach复制它迭代的数组。
因此,一些人建议写:
$keys = array_keys($array); $size = count($array); for ($i = 0; $i < $size; $i++) { $key = $keys[$i]; $value = $array[$key]; // ... }
而不是更直观和直接:
foreach ($array as $key => $value) { // ... }
这里有两个问题:
Microoptimization是不好的。通常,它只会浪费您的时间,不会带来任何可度量的性能改进。
foreach的复制行为比大多数人认为的要复杂一些。通常情况下,“优化”的版本会比原始版本慢。
foreach什么时候复制?
foreach是否复制数组以及复制的数量取决于三件事:
是否引用了迭代数组、它的refcount有多高以及迭代是否通过引用完成。
没有引用,refcount == 1
在下面的代码中,$array没有被引用,并且refcount为1。在这种情况下,foreach不会复制数组(证明)——这与流行的观点相反,即foreach总是复制没有引用的迭代数组。

