0

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

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 不仅仅是电话号码和电子邮件地址。

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

提前致谢。

4

3 回答 3

1

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

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

输出带有标签的第一行和

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

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

于 2012-05-17T22:53:58.253 回答
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。

于 2012-05-17T23:00:58.387 回答
1

我确信有一种更简洁的方法可以做到这一点,但这里有一个 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);

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

于 2012-05-17T23:04:24.793 回答