【问题标题】:How to convert Array to Array list for CSV export using FputCSV?如何使用 FputCSV 将数组转换为 CSV 导出的数组列表?
【发布时间】:2021-05-16 11:54:27
【问题描述】:

我需要将具有多个结果的数组转换为 CSV 文件,但我很难获得有效的输出。 经过一些调试后,我意识到我没有为 fputcsv 生成一个有效的数组列表来迭代。

首先,这是我的数组的 var_dump 的说明性示例:

object(stdClass)#83 (3) {
  ["Username"]=>
  string(8) "username"
  ["FullName"]=>
  bool(false)
 ["ContactPhoneNumber"]=>
  bool(false)

object(stdClass)#84 (3) {
  ["Username"]=>
  string(8) "username2"
  ["FullName"]=>
  bool(false)
 ["ContactPhoneNumber"]=>
  bool(false)

object(stdClass)#85 (3) {
  ["Username"]=>
  string(8) "username3"
  ["FullName"]=>
  bool(false)
 ["ContactPhoneNumber"]=>
  bool(false)

这是我在研究如何将数组转换为 CSV 之后尝试的代码:

$file = fopen($CsvFile, 'w');
fputcsv($file, array_keys($HeaderFields)); // Headers
$data = array($DataRecord);

foreach ($data as $row) {
   $row = [];
   array_walk_recursive($row, function ($item) use (&$row) {
      $row[] = $item;
   });
   fputcsv($file, $row);
}

fclose($file);

我还尝试使用 fputcsv 中的标准示例:

$file = fopen($CsvFile, 'w');
$data = array($DataRecord)
foreach ($data as $row) {
   fputcsv($file, $row);
}
fclose($file);

显然我做错了什么,未能生成在 csv 文件中插入多个数组行的正确格式。

如果我用这个替换我的 $data 数组:

$data = array(array('Data 11', 'Data 12', 'Data 13', 'Data 14', 'Data 15'));

然后 fputcsv 按预期工作。

所以我需要将我的数组转换成这种格式,以便 fputcsv 可以遍历它并保存每一行。

我怎样才能做到这一点?

谢谢

【问题讨论】:

  • 你有一个对象而不是数组,这就是它不起作用的原因。您需要将每个对象转换为数组以与fputcsv 一起使用。看看*.com/questions/52933052/…

标签: php csv export-to-csv fputcsv


【解决方案1】:

只需使用(array) 将对象转换为数组:

$file = fopen($CsvFile, 'w');
fputcsv($file, get_object_vars(reset($data)));

foreach ($data as $row) {
   fputcsv($file, (array)$row);
}
fclose($file);

如果对象属性和$HeaderFields 不同,请改用$HeaderFields

【讨论】:

  • 非常感谢,完美!当我刚开始使用 php 时,我已经为此苦苦挣扎了好几个小时,所以节省了我的一天:)