文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-02-27 20:42

关注

本文对 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

带有 countforeachfor 循环没有键

带有 count 功能的 for 循环和不带键的 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 $value) {
		# code...
	}
	echo 'Foreach loop without key: ' . (microtime(true) - $time_two) . ' s', PHP_EOL;
?>

输出:


For loop with count: 9.5367431640625E-7 s
Foreach loop without key: 9.5367431640625E-7 s

带有 countfor 循环和带有范围的 foreach

带有 count 的 for 循环比带有 range 的 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 (range(0, 10) as $i) {
		# code...
	}
	echo 'Foreach loop with range: ' . (microtime(true) - $time_two) . ' s', PHP_EOL;
?>

输出:


For loop with count: 1.0013580322266E-5 s
Foreach loop with range: 3.0994415283203E-6 s

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

for 循环和 foreach 循环的可读性

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯