【问题标题】:Turning a nested associative array in php into a CSV file将 php 中的嵌套关​​联数组转换为 CSV 文件
【发布时间】:2021-09-24 16:45:24
【问题描述】:

我正在处理一个 PHP 问题,并且有一个如下所示的关联数组:

(
  [2019-03-22T2:26:03-04:00] => Array
      (
          [0] => Array
              (
                  [A] => 1
                  [B] => 1
                  [C] => 2
              )

      )

  [2019-03-23T2:27:04-04:00] => Array
      (
          [0] => Array
              (
                  [A] => 1
              )

      )
)

我正在尝试将此数据转换为如下所示的 CSV:

NAME                              COUNT
2021-07-15T10:46:16-04:00
      A                             1
      B                             1
      C                             2
2021-07-15T10:46:17-04:00
      A                             1

我以前做过这个,从一个数组到 csv,使用一个简单的关联数组,但是以上面的格式获取它对我不起作用。这是我尝试过的代码:

变量 $statArray 保存我需要在 CSV 上的数组。

  $fp = fopen('test.csv', 'w');
  foreach ($statArray as $fields)
  {
    foreach ($key as $v)
    {
        fputcsv($fp, $v);
    }
  }

感谢您的帮助。

【问题讨论】:

    标签: php arrays loops csv associative-array


    【解决方案1】:

    这是一种奇怪的格式,但是您需要编写主数组键,然后获取嵌套的键和值并编写它们:

    foreach ($statArray as $date => $array)
    {
        fputcsv($fp, [$date]);  //write main key
        
        foreach ($array as $values)
        {
            foreach ($values as $name => $count)
            {
                fputcsv($fp, [$name, $count]); //write key and value
            }
        }
    }
    

    这可能更有意义:

    2021-07-15T10:46:16-04:00    A    1
    2021-07-15T10:46:16-04:00    B    1
    2021-07-15T10:46:16-04:00    C    2
    2021-07-15T10:46:17-04:00    A    1
    

    如果是的话:

    foreach ($statArray as $date => $array)
    {        
        foreach ($array as $values)
        {        
            foreach ($values as $name => $count)
            {
                fputcsv($fp, [$date, $name, $count]); //write date and key and value
            }
        }
    }
    

    无论哪种方式,您都声明了 CSV,但看起来您显示的是制表符而不是逗号。如果是这样,您将需要:

    fputcsv($fp, [$date, $name, $count], "\t");
    

    【讨论】:

    • 恕我直言,在内部循环中只有 fputcsv($fp, [$date, $name, $count]); 将是一个非常理智的 CSV 输出。但如果这是 OP 真正想要的......
    • 已编辑,忘记嵌套。
    • 谢谢!我明白了!
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 2019-02-13
    • 2018-01-31
    • 1970-01-01
    • 2012-08-25
    • 2018-07-11
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多