继续PHP While循环中断它

时间:2013-04-14 17:10:28

标签: php csv

while循环用于读取除第一行以外的CSV文件的每一行。但是,当if语句用于忽略第一行时,不会读取任何行。删除if语句允许它按预期读取所有行。这是为什么?

$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';

4 个答案:

答案 0 :(得分: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,因此会跳过所有行:)

答案 1 :(得分:3)

问题是您在增加continue的行之前点击$rowNumber。结果,$rowNumber在下一次迭代中仍为1,并且它再次向前跳过。尝试从$ rowNumber = 0开始,并将增量放在循环的开头而不是结尾。

答案 2 :(得分: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 :(得分:0)

这是因为当你继续时,你不会增加$ rowNumber。它总是1.当你的文件结束时,然后循环中断和文件关闭。