PHP 中 for 循环和 foreach 循环的性能和可读性

简介: PHP 中 for 循环和 foreach 循环的性能和可读性

[for 循环和 foreach 循环与范围]

我们在十万次迭代中比较了 for 循环和 foreach 循环与 range。测试结果表明 for 循环比 foreach 循环执行得更快。

原因是 for 循环通过增加整数值来进行比较。相比之下,foreachrange 必须在提取每个元素并检查数组末尾之前创建一个数组。

<?php
  $time_one = microtime(true);
  for ($i=0; $i < 100000; $i++) {
    # code...
  }
  echo 'For loop: ' . (microtime(true) - $time_one) . ' s', PHP_EOL;
  echo "<br />";
  $time_two = microtime(true);
  foreach (range(0, 100000) as $i) {
    # code...
  }
  echo 'Foreach + range loop: ' . (microtime(true) - $time_two) . ' s', PHP_EOL;
?>

输出:

For loop: 0.001291036605835 s
Foreach + range loop: 0.00661301612854 s

[带有后缀和前缀增量的 for 循环]

如果时间差非常关键,你应该知道带有前缀增量的 for 循环比带有后缀增量的 for 循环执行得更快。

这是因为后缀在将前一个值加一之前保留了前一个值的副本,而前缀增量在不保留前一个值的副本的情况下加一。

例子:

<?php
  $time_one = microtime(true);
  for ($i=0; $i < 100000; ++$i) {
    # code...
  }
  echo 'For loop with prefix $i: ' . (microtime(true) - $time_one) . ' s', PHP_EOL;
  echo "<br />";
  $time_two = microtime(true);
  for ($i=0; $i < 100000; $i++) {
    # code...
  }
  echo 'For loop with postfix $i: ' . (microtime(true) - $time_two) . ' s', PHP_EOL;
?>

输出:

For loop with prefix $i: 0.0012187957763672 s
For loop with postfix $i: 0.0031270980834961 s

[带有 count 函数的 for 循环]

带有 count 函数的 for 循环比没有的执行得更快。

我们在下面的代码块中运行了两个测试,第一个测试使用了一个带有 count 函数的 for 循环,第二个测试使用了没有 count 函数的数组中元素的数量。

例子:

<?php
  $myArray = [1, 4, 6, 8, 11, 14, 16, 18, 21, 24];
  $time_one = microtime(true);
  for ($i=0; $i < count($myArray); $i++) {
    # code...
  }
  echo 'For loop with count function: ' . (microtime(true) - $time_one) . ' s', PHP_EOL;
  echo "<br />";
  $time_two = microtime(true);
  for ($i=0; $i < 10; $i++) {
    # code...
  }
  echo 'For loop without count function: ' . (microtime(true) - $time_two) . ' s', PHP_EOL;
?>

输出:

For loop with count function: 6.9141387939453E-6 s
For loop without count function: 9.5367431640625E-7 s

[没有键的 foreach 和有键的 foreach]

与带有键和值的 foreach 循环相比,没有键的 foreach 循环执行得更快。

下面的代码片段有一个由十个元素组成的数组,我们在数组上执行一个 foreach 循环。第一次执行不使用键,而第二次执行使用键和值。

例子:

<?php
  $myArray = [1, 4, 6, 8, 11, 14, 16, 18, 21, 24];
  $time_one = microtime(true);
  foreach ($myArray as $value) {
    # code...
  }
  echo 'Foreach loop without key: ' . (microtime(true) - $time_one) . ' s', PHP_EOL;
  echo "<br />";
  $t01 = microtime(true);
  foreach ($myArray as $key => $value) {
    # code...
  }
  echo 'Foreach loop with key and value: ' . (microtime(true) - $t01) . ' s', PHP_EOL;
?>

输出:

Foreach loop without key: 0.00055599212646484 s
Foreach loop with key and value: 9.5367431640625E-7 s

[带有 count 函数的 for 循环和带有键和值的 foreach]

foreach(带有键和值)和 for 之间使用 count 函数对包含十个元素的数组进行测试表明,带有键和值的 foreach 比带有计数功能。

例子:

<?php
  $myArray = [1, 4, 6, 8, 11, 14, 16, 18, 21, 24];
  $time_one = microtime(true);
  for ($i=0; $i < count($myArray); $i++) {
    # code...
  }
  echo 'For loop with count: ' . (microtime(true) - $time_one) . ' s', PHP_EOL;
  echo "<br />";
  $time_two = microtime(true);
  foreach ($myArray as $key => $value) {
    # code...
  }
  echo 'Foreach loop with key and value: ' . (microtime(true) - $time_two) . ' s', PHP_EOL;
?>

输出:

For loop with count: 8.1062316894531E-6 s
Foreach loop with key and value: 2.1457672119141E-6 s

请注意,当你在 Web 浏览器中运行代码示例时,你会得到不同的时间结果。我们在 Windows 10 上使用 PHP 8.1.2 执行了上述所有代码示例。

[for 循环和 foreach 循环的可读性]

在可读性方面,你会发现 for 循环比 foreach 循环具有更好的可读性。这是因为,对于 for 循环,你会知道你正在比较一个小于较大数字的计数器。

当使用带有 range 的 foreach 时,你必须在 foreach 循环中推断 range 函数的目的

相关文章
|
13天前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
3月前
|
编译器 PHP 开发者
探索PHP 8的新特性与性能优化技巧
【7月更文挑战第19天】在数字时代的浪潮中,PHP作为一门广泛使用的服务器端脚本语言,其最新版本PHP 8的发布引起了开发者社区的广泛关注。本文将深入探讨PHP 8引入的一系列新特性,包括但不限于JIT编译器、联合类型、命名参数、匹配表达式等,并分享如何利用这些新工具提升代码的性能和可维护性。同时,我们还将讨论一些实用的性能优化技巧,帮助开发者写出更加高效、稳定的PHP应用。
|
1月前
|
安全 测试技术 PHP
如何评估PHP框架的性能?
【9月更文挑战第2天】如何评估PHP框架的性能?
41 5
|
2月前
|
数据处理 PHP 开发者
PHP中的数组操作技巧:提高代码效率与可读性
【8月更文挑战第27天】在PHP开发中,数组是数据处理的核心。掌握数组的操作不仅能提升代码的执行效率,还能增强代码的可读性。本文将通过实际的编码示例,展示如何在PHP中高效地使用数组,包括数组的创建、遍历、排序、查找和过滤等常用操作,以及一些高级技巧,如使用匿名函数和数组的解构赋值。无论你是新手还是有经验的开发者,这些技巧都将对你的PHP编程之旅大有裨益。
|
2月前
|
SQL 缓存 数据库连接
拯救php性能的神器webman-数据库
Webman 框架与这些最佳数据库管理实践的结合,可为应用程序提供快速响应的用户体验,高吞吐量,提升应用程序的整体性能表现。在对数据库交互进行设计和开发时,持续关注性能指标和优化,确保数据库层面不会成为应用程序的瓶颈,这样便能充分利用 Webman 来提升 PHP 应用的性能。
82 4
|
2月前
|
存储 前端开发 JavaScript
优化PHP代码性能
【8月更文挑战第3天】优化PHP代码性能
42 16
|
2月前
|
存储 缓存 自然语言处理
|
3月前
|
缓存 安全 测试技术
深入PHP 7:新特性与性能提升解析
在PHP 7的发布中,我们见证了一系列令人兴奋的性能改进和新特性的加入。本文将深入探讨这些变化如何影响开发者的日常编程实践,并展示通过实际例子如何最大化利用PHP 7的优势。准备好迎接代码效率和开发体验的全新升级!
|
2月前
|
Java PHP
从引用计数到循环垃圾回收——解锁PHP高效内存管理的秘密
【8月更文挑战第2天】深入理解PHP中的垃圾回收机制
57 3
|
3月前
|
存储 监控 大数据
深入理解PHP 7的新特性及其性能优化技巧
【7月更文挑战第26天】随着PHP 7的发布,这一广泛使用的编程语言迎来了重大的性能提升和新特性。本文将深入探讨PHP 7的核心改进点,包括性能提升的原因、新引入的语言特性以及如何利用这些变化来优化现有和未来的PHP项目。我们将通过实际代码示例和性能分析工具来展示如何有效地应用这些新特性以达到最佳的性能表现。