我有一个大型文本文件,包含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++;
}
答案 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);