为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 PHP 函数 fgetcsv() 或 fopen() 跳过前 n 行?

如何使用 PHP 函数 fgetcsv() 或 fopen() 跳过前 n 行?

PHP
慕仙森 2023-08-19 14:26:50
使用 打开 CSV 文件后fopen(),我目前正在跳过这些文件的前三行,如下所示:fgetcsv($file, 0, ';');fgetcsv($file, 0, ';');fgetcsv($file, 0, ';');有没有更好的方法来跳过前 n 行?
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果您需要跳过多行,只需添加循环内已有的“一次性读取”代码的一个实例即可for。循环数等于跳过的行数(例如 8 行):

for ($i = 0; $i < 8; $i++) { 
    fgetcsv($file, 0, ';');
}

在开始主while循环获取您关心的 CSV 行之前执行此操作。您可以将循环转变为实用函数——如果您发现自己经常以不同的跳跃长度执行此操作。

function fskipcsv_lines($handle, int $lines) {
    for ($i = 0; $i < $lines; $i++) { 
        fgetcsv($handle, 0, ';');
    }
}

够简单的。相同的构造适用于您不需要从中获取返回值的任何其他函数的“哑”重复,该函数只需要被调用 N 次。

PS 不要将“跳行”检查例程放在主 CSV 迭代循环中。为什么?因为检查(例如$row < 3; 或in_array($row, $skips))会在每次循环迭代时发生。假设您需要读取 100,000 多行,开销将开始增加,因为前几行(现在已经过去)而给每个循环迭代带来不必要的负担。


查看完整回答
反对 回复 2023-08-19
?
弑天下

TA贡献1818条经验 获得超7个赞

查看此代码。

$file = fopen('example.csv', 'r');  // Here example is a CSV name

$row = 1;

$number_to_skip = 3

while (($line = fgetcsv($file,0, ",")) !== FALSE) {

// $line is an array of the csv elements

if($row < $number_to_skip)

  $row++; continue;   // continue is used for skip row 0,1,2

print_r($line);


}


查看完整回答
反对 回复 2023-08-19
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

你做得对,但是如果你要跳过很多代码,这段代码可能会有所帮助。:


$skippTheseLines = array(1,2,3);

$i = 0;

$totlLines= 10000;


while (($emapData = fgetcsv($file, $totalLines, ";")) !== FALSE) {


   if(in_array($i, $skippTheseLines)) { 

       continue; 

   }else{

       // rest of your code

   }


    $i = $i + 1;

}


查看完整回答
反对 回复 2023-08-19
  • 3 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信