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 多行,开销将开始增加,因为前几行(现在已经过去)而给每个循环迭代带来不必要的负担。
TA贡献1818条经验 获得超8个赞
查看此代码。
$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);
}
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;
}
- 3 回答
- 0 关注
- 120 浏览
添加回答
举报