2017-08-24 74 views
0

我有一個超過100,000行的非常大的文本文件。我需要收集/跳過設定數量的線路:循環線路1-100,跳過線路101-150,讀取線路151-210,跳過線路211-300(例如)。PHP循環 - 跳過某些行

我有以下代碼

$lines = file('file.txt'); 
$counter = 0; 

foreach ($lines as $lineNumber => $line) { 

    $counter++; 

    if ($counter < 101) { 
     //Do update stuff 
    } 

    if ($counter < 102 && $counter > 151) { 
     //Skip these lines 
    } 

    if ($counter < 152 && $counter > 211) { 
     //Do update stuff 
    } 
} 

有沒有更好的方式來跳過一個陣列輸出的多行?

+0

不是一個好主意,在內存中有一個大文件 –

+0

不要在這種情況下使用foreach,使用和利用計數器 – clearshot66

+0

用'fread'逐行讀取文件 –

回答

2

首先,移動到fgets,這是內存有效的方式。你不需要在內存中擁有所有的數組。至於條件,只需將您的所有條件與or運營商相結合,不要添加跳過條件,這是沒用的。

if ($counter < 101 || ($counter >= 151 && $counter <= 210) || add another pediods here) { 
    //Do update stuff 
} 

P.S.你在你的條件中有一個錯誤,($counter < 102 && $counter > 151)總是false以及另一個。

+0

使用fgets,我可以使用'w'而不是'r',這樣我可以在完成邏輯處理後寫入文件。 – Adam

+1

你是司機)你當然可以。使用'fseek'來進入它。 –

+0

@AdamA:如果您重視您的數據,則不需要。如果您想使用'fgets',請將更新的數據寫入第二個文件。 (您的處理循環完成後,您可以將其移至輸入文件的頂部)。 – cHao