PHP - 计算.csv文件第一行中的列数

时间:2015-10-01 16:20:29

标签: php csv fgetcsv

我正在尝试计算第一个.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);
  }

有什么建议吗?

2 个答案:

答案 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的结果。