【问题标题】:PHP Array ChangesPHP 数组更改
【发布时间】:2012-05-17 22:45:33
【问题描述】:

我有按以下方式设置的数据:

array(
      0 => array(
                  'data_id' => 0,
                  'elem_value' => 'phone',
                  'elem_prettyname' => 'Phone Number'
                 ),
      1 => array(
                  'data_id' => 0,
                  'elem_value' => 'email',
                  'elem_prettyname' => 'Email Address'
                 ),
      2 => array(
                  'data_id' => 1,
                  'elem_value' => 'phone',
                  'elem_prettyname' => 'Phone Number'
                 ),
      3 => array(
                  'data_id' => 1,
                  'elem_value' => 'email',
                  'elem_prettyname' => 'Email Address'
                 )
     )
)

我正在尝试将其转换为 csv 文件,如下所示:

"Data ID","Phone Number","Email Address"
0,"phone","email"
1,"phone","email"

但我一辈子都想不通。我有大量随机数组,但它们无处可去。

我应该提到,elem_prettyname 可以有无限数量的元素。IE 不仅仅是电话号码和电子邮件地址。

谁能指出正确的方向以正确格式化?

提前致谢。

【问题讨论】:

  • “无限维度”的含义与“包含许多不同的 elem_perttyname 值”完全不同。尝试显示一个真实的数组并将“大致类似”转换为“完全类似”,以便人们可以给您具体的答案。
  • 嗯,你的答案正是我所需要的。所以谢谢你的猜测。

标签: php arrays csv multidimensional-array


【解决方案1】:

您需要先将数据转换为如下所示的数组:0,"phone","email"

类似这样的:

$lines = array();
foreach($inTheQuestion as $row) {
    if (empty($lines[$row['data_id']])) {
        $lines[$row['data_id']] = array($row['data_id']);
    }
    $lines[$row['data_id']][] = $row['elem_value'];
}
var_dump($lines);

如果那是您想要的格式(问题中并不清楚) - 然后您只需使用 fputcsv 或简单地使用 fwrite 将数据转储到文件中。

【讨论】:

    【解决方案2】:

    我确信有更简洁的方法可以做到这一点,但这里有一个 bash。它对我有用...

    $array = array(
          0 => array(
                      'data_id' => 0,
                      'elem_value' => 'phone',
                      'elem_prettyname' => 'Phone Number'
                     ),
          1 => array(
                      'data_id' => 0,
                      'elem_value' => 'email',
                      'elem_prettyname' => 'Email Address'
                     ),
          2 => array(
                      'data_id' => 1,
                      'elem_value' => 'phone',
                      'elem_prettyname' => 'Phone Number'
                     ),
          3 => array(
                      'data_id' => 1,
                      'elem_value' => 'email',
                      'elem_prettyname' => 'Email Address'
                     )
         );
    
    $string = '"Data ID","Phone Number","Email Address"' . "\n";
    foreach($array as $r){
        $data_id[$r['data_id']][] = $r['elem_value'];   
    }
    foreach($data_id as $k => $d){
        $string .= $k . ",\"" . implode('","',$d) . "\"\n"; 
    }
    file_put_contents('my.csv',$string);
    

    我假设总是有电话、电子邮件 - 否则会变得混乱。

    【讨论】:

      【解决方案3】:

      如果你想写csv文件你可以使用fputcsv()

      fputcsv($fp, array_keys(reset($my_array)));
      

      用标签输出第一行

      foreach($my_array as $item) {
        fputcsv($fp, array_values($item));
      }
      

      输出休息。 $fp 必须是为写入而打开的文件的文件句柄。你可以通过fopen()获得它

      【讨论】:

      • 这在我所处的环境中是行不通的。刚试过但没有用:(
      • 对不起。与您想要获取的 csv 文件相比,我没有注意到您的数据真的很奇怪。我只是专注于输出 csv 文件。
      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多