2013-04-14 22 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循环中断和文件关闭。