4.24 使用生成器高效迭代处理大型数据集
PHP
echo '
';
/使用生成器高效迭代处理大型数据集/
function FileLineGenerator($file) {
if(!$fh = fopen($file,'r')) {
return;
}
while(false !== ($line = <a href="https://www.jb51.cc/tag/fget/" target="_blank" class="keywords">fget</a>s($fh))) {
yield $line;
}
fclose($fh);
}
$file = FileLineGenerator('str.txt');
foreach($file as $line) {
if(preg_match('/^Color:/',$line)) echo $line;
}
/
Color:Red
Color:White
Color:Blue
/
/**/
/循环处理一个文件,并且打印文件中随机一行/
$line_number = 0;
foreach(FileLineGenerator('str.txt') as $line) {
$line_number++;
if(mt_rand(0,$line_number - 1) == 0) {
$selected = $line;
}
}
echo $selected;
/***/
function ArrGenerator($arr) {
$i = 0;
while($i < count($arr)) {
yield $arr[$i];
$i++;
}
}
$arr = ['Color:Red','Color:White','Color:Blue','Beijing','Shanghai','Jiujiang'];
$arr = ArrGenerator($arr);
foreach($arr as $val) {
if(preg_match('/^Color:/',$val)) echo $val,PHP_EOL;
}
/
Color:Red
Color:White
Color:Blue
/