str_getcsv返回奇怪的结果

时间:2014-04-17 09:27:45

标签: php csv

我有以下csv文件:

 1,1,1
 2,2,2
 3,3,3

以及以下php代码:

 $row = str_getcsv(file_get_contents($filename));
 print_r($row);

结果:

Array
(
  [0] => 1
  [1] => 1
  [2] => 1
  2
  [3] => 2
  [4] => 2
  3
  [5] => 3
  [6] => 3
)

应该是:

Array
(
  [0] => 1
  [1] => 1
  [2] => 1
  [3] => 2
  [4] => 2
  [5] => 2
  [6] => 3
  [7] => 3
  [8] => 3
)

为什么会发生这种情况?我的目标是在多维数组中读取csv。谢谢!

3 个答案:

答案 0 :(得分:2)

str_getcsv期望 CSV输入的单行。你必须这样使用它:

$csv  = file($filename, FILE_IGNORE_NEW_LINES);
$data = array();
foreach ($csv as $line) {
    $data[] = str_getcsv($line);
}

但如果你这样做,你也可以使用效率更高的fgetcsv

$fh   = fopen($filename, 'r');
$data = array();
while ($row = fgetcsv($fh)) {
    $data[] = $row;
}

答案 1 :(得分:1)

这是因为在最后1和最后2之后没有逗号:)

答案 2 :(得分:1)

str_getcsv只能解析一行csv数据,而不是整数。

您可以通过循环获得结果,或者只是

$row = str_getcsv(join(',', file($filename)));

如果格式已修复,您可以改为使用explode

或者对于文件,有 fgetcsv 功能。