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 關注
- 162 瀏覽
添加回答
舉報