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';
答案 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.当你的文件结束时,然后循环中断和文件关闭。