2012-05-17 53 views
0

我有一個的設置方式如下數據:PHP陣列都發生改變

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不只是電話號碼和電子郵件地址。

任何人都可以指向正確的方向,以正確格式?

在此先感謝。

+0

「無限維」表示完全不同於「包含elem_perttyname的許多不同值」的東西。嘗試展示一個真正的數組並將「粗略地」轉換爲「完全像這樣」,這樣人們可以給你特定的答案。 – AD7six

+0

那麼,你的答案正是我所需要的。所以感謝猜測。 – Peter

回答

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。

+0

非常好,謝謝。 – Peter

1

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

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

到ouptut與標籤第一線和

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

輸出休息。 $ fp必須是打開的文件的文件句柄。你可以得到它fopen()

+0

這不會在我所處的環境中工作。只是嘗試過,但無濟於事:( – Peter

+0

對不起。我沒有注意到你的數據與你想要得到的csv文件相比真的很棒。輸出csv文件 –

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

我假設總是有電話,電子郵件 - 否則它會混亂。