PHP逐行读取大文件,将代码修改为读取选定的行

时间:2018-08-05 16:54:16

标签: php

我有一个大型文本文件,包含800 K行,大小为60 MB。我尝试了此代码

$fileData = function() {
    $file = fopen('800K.txt','r');
    if (!$file)
        die('file does not exist or cannot be opened');
    while (($line = fgets($file)) !== false) {
        yield $line;
    }
    fclose($file);
};

foreach ($fileData() as $line) {
   echo $line.'<br>';
}

它确实有效:)。但是缺点是它会读取所有800 K行:( .......可以转换为for循环,因此像

这样的行容易选择
for ($i=1; $i<=10000; $i++){ 
$line=trim($lines[$i]); 
}



ANSWER :
$i=0;  //// start number
foreach ($fileData() as $line) {
   if($i==100) break;  ///// end number
   echo $line.'<br>';
   $i++; 
}

1 个答案:

答案 0 :(得分:-1)

编辑:

这篇文章进行了一些测试,测试了它们使用较大文件的情况...

https://stackoverflow.com/a/31235307/2405805

$file = '../data/800k.txt';
$lines = file($file);
$rangeStart = 200000;
$rangeEnd = 300000;
$selection = array_slice($lines,$rangeStart,$rangeEnd);
echo json_encode($selection);

或者:

$file = '../data/800k.txt';
$rangeStart = 200000;
$rangeLength = 100000;
foreach (new LimitIterator($file, $rangeStart, $rangeLength) as $line) {
    array_push($lines,$line);
}
echo json_encode($lines);

请注意,如果该项以0或1开头,那么我不是100%使用这些方法,因此可能是(200000,300000)或(199999,299999);