PHP逐行读取大文件代码修改以读取选定行
我有一个大的文本文件,包含800K行,大小为60MB。我试过这个代码PHP逐行读取大文件代码修改以读取选定行,php,Php,我有一个大的文本文件,包含800K行,大小为60MB。我试过这个代码 $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; } fclos
$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>';
}
$fileData=function(){
$file=fopen('800K.txt','r');
如果(!$file)
die('文件不存在或无法打开');
while(($line=fgets($file))!==false){
收益率$line;
}
fclose($文件);
};
foreach($fileData()作为$line){
回显$line.“
”;
}
它真的可以工作:)。但缺点是它可以读取所有800k行:(……它可以转换为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++;
}
对于($i=1;$i编辑:
这篇文章有一些测试,他们用更大的文件来做
或:
注意,如果项目从0或1开始,我不是100%使用这些方法,因此它可能是(200000、300000)或(199999、299999)如果脚本有1GB的可用内存…是的,对不起,误读了这个问题。我会用一个更好的答案更新这个问题。更新了一个更好的答案…@Devon我有16 GB的服务器内存。更惯用的方法是,在使用SPL时,使用一个。例如,在$file
中给定一个SplFileObject,您可以从中读取100行fset 12345的循环如下:foreach(new LimitIterator($file,12345100)as$line){…}
可以很容易地选择像
这样的行。不确定你在问什么。你能澄清你的问题吗。
$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);