PHP数组更改

时间:2012-05-17 22:45:33

标签: php arrays csv multidimensional-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'
                 )
     )
)

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

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

但我无法理解我的生活。我有大量的随机数组,它们无处可去。

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

有人能指出我正确的方向来正确地格式化吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

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

待办事项

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

使用标签ouptut第一行和

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

输出休息。 $ fp必须是为写入而打开的文件的文件句柄。您可以使用fopen()

获取它

答案 1 :(得分: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 :(得分:1)

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

$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);

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