我正在尝试确定csv文件有多少列。
这是我的脚本,它只使用第一列,但我的运行略显失明。我想放置一个限制列数的变量。 (因为我可能会犯错误并添加一列,甚至错过一列)
<?php
$allowedColNum=5;
$batchcount=0;
$file = fopen($file_name, "r");
while ($line = fgetcsv($file)){
/* I want to stop the loop if the $allowedColNum is not correct */
$col = $line[0];
echo $batchcount++.". ".$col."\n";
}
fclose($file);
?>
我确信这是我不会轻易做到的事情之一。
答案 0 :(得分:13)
如果我理解,您只需要count($line)
,因为fgetcsv()
已经返回了一个表示CSV文件中一行的数组。因此,数组的count()
是源列的数量。
while ($line = fgetcsv($file)){
// count($line) is the number of columns
$numcols = count($line);
// Bail out of the loop if columns are incorrect
if ($numcols != $allowedColNum) {
break;
}
$col = $line[0];
echo $batchcount++.". ".$col."\n";
}
答案 1 :(得分:0)
未经测试,但应该可以使用!
$allowedColNum=5;
$batchcount=0;
$file = fopen($file_name, "r");
$totCols=0;
while ($line = fgetcsv($file))
if(count($line) > $totCols) $totCols = count($line);
fseek($file, 0);
while ($line = fgetcsv($file))
{
//....
}
fclose($file);
编辑:测试,工作 做fseek(0)而不是保存数组中的值:会快得多
答案 2 :(得分:0)
Michael Berkowski回答我的工作正常,但就我而言,我还必须在fgetcsv()函数调用中指定csv分隔符。它是逗号“,”默认情况下,我将其更改为分号“;”。像这样:
while($ line = fgetcsv($ file,0,';')){