0

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

4 回答 4

5

你不需要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 用于循环结构中以跳过当前循环迭代的其余部分并在条件评估处继续执行,然后开始下一次迭代。

这意味着当您的 continue 被调用时,您的语句$rowNumber++;也会被跳过,这意味着您$rowNumber始终保持为 1,因此所有行都被跳过:)

于 2013-04-14T17:12:59.703 回答
3

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

于 2013-04-14T17:15:42.617 回答
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

于 2013-04-14T17:14:07.073 回答
0

这是因为当您继续时,您不会增加 $rowNumber。它始终为 1。当您的文件结束时,while 循环中断并且文件关闭。

于 2013-04-14T17:16:10.697 回答