当前位置:首页 > 编程笔记 > 正文
已解决

php yield定义生成器,加快foreach、for等循环速度

来自网友在路上 194894提问 提问时间:2023-10-30 12:47:57阅读次数: 94

最佳答案 问答题库948位专家为你答疑解惑

yield关键字用于定义生成器函数。生成器函数可以一次生成一个值,并在每次生成值后暂停其执行,直到请求下一个值。这使得生成器可以有效地处理大量数据或无限数据流

不使用yield使用yield执行方式函数会立即执行,并一次性返回所有结果。函数执行过程中可能占用较多的内存函数不会立即执行完毕,而是返回一个对象。每次调用对象的迭代器方法时,函数才会继续执行一段代码,并生成一个值,然后暂停执行,等待下一次迭代请求返回结果函数会返回一个数组、字符串、对象等值,包含所有生成的结果函数返回一个对象,通过迭代对象可以逐个获取生成的值。不会一次性生成所有结果,只会按需生成。 使用yield关键字可以实现按需生成值,避免一次性生成所有结果,从而节省内存并提高性能速度相差下面案例   0.0246617794秒 下面案例    0.0000009537秒

1、不使用yield

<?php
function getNumbers() {$numbers = [];for ($i = 1; $i <= 1000000; $i++) {$numbers[] = $i;}return $numbers;
}
$start = microtime(true); // 记录开始时间
$numbers = getNumbers();
$end = microtime(true); // 记录结束时间
$time2 = $end - $start; // 计算运行时间
echo "不使用yield: \n运行时间: " . $time2. "秒\n";

2、使用yield

function generateNumbers() {for ($i = 1; $i <= 1000000; $i++) {yield $i;}
}
$start = microtime(true); // 记录开始时间
$generator = generateNumbers();
$end = microtime(true); // 记录结束时间
$time1 =number_format($end - $start, 10);  // 计算运行时间echo "使用yield: \n运行时间: " . $time1 . "秒\n";

 使用yield的函数必须使用迭代器方法(如foreach循环)来遍历生成的值,否则函数中的代码不会被执行。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"php yield定义生成器,加快foreach、for等循环速度":http://eshow365.cn/6-27808-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!