3 回答

TA貢獻2012條經(jīng)驗 獲得超12個贊
如果您需要跳過多行,只需添加循環(huán)內(nèi)已有的“一次性讀取”代碼的一個實例即可for
。循環(huán)數(shù)等于跳過的行數(shù)(例如 8 行):
for ($i = 0; $i < 8; $i++) { fgetcsv($file, 0, ';'); }
在開始主while
循環(huán)獲取您關(guān)心的 CSV 行之前執(zhí)行此操作。您可以將循環(huán)轉(zhuǎn)變?yōu)閷嵱煤瘮?shù)——如果您發(fā)現(xiàn)自己經(jīng)常以不同的跳躍長度執(zhí)行此操作。
function fskipcsv_lines($handle, int $lines) { for ($i = 0; $i < $lines; $i++) { fgetcsv($handle, 0, ';'); } }
夠簡單的。相同的構(gòu)造適用于您不需要從中獲取返回值的任何其他函數(shù)的“啞”重復(fù),該函數(shù)只需要被調(diào)用 N 次。
PS 不要將“跳行”檢查例程放在主 CSV 迭代循環(huán)中。為什么?因為檢查(例如$row < 3
; 或in_array($row, $skips)
)會在每次循環(huán)迭代時發(fā)生。假設(shè)您需要讀取 100,000 多行,開銷將開始增加,因為前幾行(現(xiàn)在已經(jīng)過去)而給每個循環(huán)迭代帶來不必要的負(fù)擔(dān)。

TA貢獻1818條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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 關(guān)注
- 174 瀏覽
添加回答
舉報