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 に答える