我正在尝试计算第一个.csv文件行的列。
这是我的文件内容(CRLF - >回车和换行): test.csv
A;B;C;crlf
脚本:
$handle = fopen($filePath,'r');
$data = fgetcsv($handle, 1000, ";");
print_r($data) . PHP_EOL;
echo 'column nr.: ' . count($data) . PHP_EOL;
输出:
Array
(
[0] => A
[1] => B
[2] => C
[3] =>
)
column nr.: 4
如果行在最后一个; 之后结束,为什么该函数包含空白列 我希望只计算3列而不是4列。
由于
我用以下方法省略了最后一个分号: 好, CSV现在每行有25列,并使用以下方法创建:
public function createRowForFile(Array $content, $fileName, $sep, $carriageReturnLineFeed) {
$contentRow = '';
$noSep = '';
$lastColumn = count($content);
$columnNr = 1;
foreach ($content as $contentName => $contentValue) {
// the semicolon after the last column is omited, because semicolonsdefine breaks between columns,
// (
// ex: A;B;C; columns nr = 4 WRONG
// A;B;C columns nr = 3 OK
// )
if ($lastColumn === $columnNr) {
$sep = $noSep;
}
$columnNr++;
$contentRow.= $contentValue . $sep;
}
$contentRow.= $carriageReturnLineFeed;
$this->writeFileInDir($fileName, $contentRow);
}
有什么建议吗?
答案 0 :(得分:1)
您的文件中有3个分号,表示它定义了4列。并且,如果您在Linux上执行此操作,请检查http://php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings以使fgetcsv正确检测行结尾。
答案 1 :(得分:1)
传统上,最后一列后面没有分隔符;
。 PHP假设您有4列而不是3.删除最后一个分号以得到3的结果。