概念太晦涩,看不懂,直接上例子:
问题:得到一个1-1000000的整数数组,然后用foreach遍历输出
如果没有生成器,这样做:
$arr=range(1,1000000);//这个函数最终会返回一个数组;
foreach ($arr as $key => $value) {//此时遍历的是整个放在内存中的数组 echo $key.‘=>‘.$value.‘<br />‘; //输出}//总结:由迭代器我们可以知道,foreach的时候,每次遍历都会操作内存中的数组的键值,改变指针指向等等,//遍历一次,操作一次数组,这样很耗费内存 如果有生成器,这样做:
function xrange( $start , $limit , $step = 1 ) {//简单写一个range() for ( $i = $start ; $i <= $limit ; $i += $step ) { yield $i ; //yield会将当前值返回,而不是保存到数组中 }}foreach(xrange(1,1000000)as $key=>$value){//这里遍历时,遍历的是一个xrange的返回值(不是数组) echo $key.‘=>‘."$value".‘<br />‘ ;//输出}//总结:foreach每次遍历,都会调用一次xrange函数,而每调用一次xrange函数,都能得到一个yield的返回值,//然后yield会将下一个值放到自己里面,等到foreach下次遍历yield会返回这个值,然后再将下一个值放到自己里面...//这就是yield,它使得foreach的时候可以不用每次遍历都操作内存中的数组,遍历的时候直接就有被遍历的值了,//不用再去操作数组然后再得到要被遍历的值 至于其他相关高深内容,去查看手册和大神们的帖子吧!ps:yield想要生效,前提是php的版本>=5.5.0
时间: 2024-10-08 09:52:30