PHP - 将二维数组写入 CSV 文件但神秘地将“0,1,2,3,4,5,6,7,8,9”作为第一行?

PHP - Writing 2d array to CSV file but mysteriously getting "0,1,2,3,4,5,6,7,8,9" as first row?

我正在尝试使用此处描述的以下功能编写 .csv 文件:

Export to CSV via PHP

这是函数:

function array2csv(array &$array)
{
  if (count($array) == 0) {
    return null;
  }
  ob_start();
  $df = fopen('/path/to/file.csv', 'w');

  fputcsv($df, array_keys(reset($array)));
  foreach ($array as $row) {
    fputcsv($df, $row);
  }
  fclose($df);
  return ob_get_clean();
}

我这样称呼它:

array2csv($array);

其中$array[0](所有其他值均遵循此格式)如下:

array(10) {
  [1]=>
  string(19) "2015-03-01 00:09:01"
  [2]=>
  string(11) "1234567890"
  [3]=>
  string(2) "26"
  [7]=>
  string(7) "0.10102"
  [8]=>
  string(12) "TESTING THIS"
  [9]=>
}

我已经纠结了一段时间,现在想弄清楚为什么我在 .csv 文件中得到如下输出:

0,1,2,3,4,5,6,7,8,9
"2015-03-01 00:09:01",1234567890,26,0.10102,"TESTING THIS"
... etc ...

在做研究时没有真正看到任何其他类似的问题,我自己也不明白为什么会这样。

谁能告诉我这是怎么回事?谢谢!

您正在将密钥写入文件,在这里

fputcsv($df, array_keys(reset($array)));

它将数组的数组键作为 header 放在第一行:

fputcsv($df, array_keys(reset($array)));

表示您有一个二维数组,其中包含基于 0 的键,例如

Array ( 
    0 => Array ("2015-03-01 00:09:01",1234567890,26,0.10102,"TESTING THIS")
    1 => Array (...)
    2 => Array (...)
    3 => Array (...)
    4 => Array (...)
    5 => Array (...)
    6 => Array (...)
    7 => Array (...)
    8 => Array (...)
    9 => Array (...)
)