2013-04-14 24 views
0

while循環用於讀取除第一行之外的每一行CSV文件。但是,如果使用if語句忽略第一行,則不會讀取任何行。刪除if語句允許它按預期讀取所有行。爲什麼是這樣?繼續PHP While循環而不是打破它

$rowNumber = 1; 

// Load CSV into array 
$inputFileName = '/var/www/site/data.csv'; 
$file = fopen($inputFileName, 'r'); 

while (($row = fgetcsv($file)) !== FALSE) { 
    // Ignore row #1 (headers) 
    if($rowNumber == 1) 
     continue; 

    doSomeWork(); 

    // Increment row number 
    $rowNumber++; 
} 
fclose($file); 

echo 'Loaded: ' . $rowNumber . ' rows'; 
+0

爲什麼你添加了所有這些標籤? – PeeHaa

回答

4

你不需要continue那裏。嘗試

$rowNumber = 1; 

// Load CSV into array 
$inputFileName = '/var/www/site/data.csv'; 
$file = fopen($inputFileName, 'r'); 

while (($row = fgetcsv($file)) !== FALSE) { 
    // Ignore row #1 (headers) 
    if($rowNumber != 1) 
    { 
    doSomeWork(); 
    } 

    // Increment row number 
    $rowNumber++; 
} 
fclose($file); 

echo 'Loaded: ' . $rowNumber . ' rows'; 

編輯

只是爲了解釋爲什麼你continue你想到沒工作。 PHP手冊中說

continue在循環結構中用於跳過當前循環迭代的其餘部分,並繼續執行條件評估,然後開始下一次迭代。

這意味着,當你繼續叫那麼你的陳述$rowNumber++;也跳過,這意味着你的$rowNumber始終保持1,因此所有的行被跳過:)

+0

+ 2^n清除它在答案的底部:) –

1

試試這個:

$rowNumber = 1; 

// Load CSV into array 
$inputFileName = '/var/www/site/data.csv'; 
$file = fopen($inputFileName, 'r'); 

while (($row = fgetcsv($file)) !== FALSE) { 
    // Ignore row #1 (headers) 
    if($rowNumber > 1) {   
     doSomeWork(); 
    } 
    // Increment row number 
    $rowNumber++; 
} 
fclose($file); 

echo 'Loaded: ' . $rowNumber . ' rows'; 

如果$rowNumber大於1,那麼將爲doSomething(),否則它只會增加$rowNumber

3

問題是您在增加$rowNumber的行之前點擊continue。因此,$rowNumber在下一次迭代中仍然爲1,並且它再次跳轉。嘗試從$ rowNumber = 0開始,並將增量放在循環的開始處而不是結束處。

0

這是因爲當您繼續時,您不會增加$ rowNumber。它總是1.當你的文件結束時,然後while循環中斷和文件關閉。