2016-07-13 24 views
0

JSONをCSVファイルに変換したいと思います。私は4列目のアレイ値を取得し、私のCSVファイルではサブ配列jsonをCSVファイルに変換するには?

Array to string conversion

:私はこの通知を取得し、

<?php 
$response = '[{ 
    "field1": "vala1", 
    "field2": "vala2", 
    "field3": "vala3", 
    "field4": [{ 
     "field4a": "vala4-1", 
     "field4b": "vala4-2", 
     "field4c": "vala4-3" 
    }] 
}, { 
    "field1": "valb1", 
    "field2": "valb2", 
    "field3": "valb3", 
    "field4": [{ 
     "field4a": "valb4-1", 
     "field4b": "valb4-2", 
     "field4c": "valb4-3" 
    }] 
}]'; 

$list = json_decode($response, true); 
$fp = fopen('test_json.csv', 'w'); 

foreach ($list as $fields) { 
    fputcsv($fp, $fields, ';'); 
} 

fclose($fp); 
?> 

しかし: はここに私のPHPコードです。

がここで出力期待です:

echo $fields['field1'] . ';' . $fields['field2'] . ';' . $fields['field3'] . ';' . $fields['field4'][0]['field4a'] . ',' . $fields['field4'][0]['field4b'] . ',' . $fields['field4'][0]['field4c'] . '<br>'; 

しかし、それはCSVファイルへのサブアレイのJSONに変換する方法、 ..だから柔軟ではありません。

vala1;vala2;vala3;vala4-1,vala4-2,vala4-3 
valb1;valb2;valb3;valb4-1,valb4-2,valb4-3 

私はこのコードを使用する場合、私は期待値を得ることができますJSONファイルに多くのフィールドを追加しても動作しますか?事前に

おかげで、

+0

、あなたは '$ fields'をあなたは、文字列としてダンプしようとする子アレイ、ある意味しています。複数のループが必要です。 –

+2

[PHPをjsonをcsvにサブ配列で変換する]の可能な複製(http://stackoverflow.com/questions/34244197/php-convert-json-into-csv-with-sub-array) – Deadpool

答えて

1

編集:私は馬鹿だったと考えていませんでした。正解は次のようにする必要があります。

foreach ($list as $fields) { 
    $flatFields = []; 
    foreach ($fields as $value) { 
     $newValue = $value; 
     if (isset($value[0]) && is_array($value[0])) { 
      $newValue = implode(',', $value[0]); 
     } 
     $flatFields[] = $newValue; 
    } 
    fputcsv($fp, $flatFields, ';'); 
} 

まだテストしていませんが、うまくいくはずです。しかし、サブアレイでもにサブアレイが含まれている場合は、それを処理するための再帰関数が必要です。私に知らせてください。

+0

ありがとうございました、 'fputcsv()はパラメータ2が配列になることを期待しています' – Julien

+0

私が作ったばかりの編集を確認してください、私はばかだと思います:P –

+0

もう一度おねがいしますが、このエラーが発生します: 'Parse error:syntax error、unexpected '$ value'(T_VARIABLE) '私は非常に申し訳ありません...ありがとう:) – Julien

0

これを試してください:あなたは、単一のループをやっている

... 
    $list = json_decode($response, true); 
    $fp = fopen('test_json.csv', 'w'); 

    foreach ($list as $fields) { 
     $fields['field4'] = implode(',',$fields['field4']); 
     fputcsv($fp, $fields, ';'); 
    } 

    fclose($fp); 
+0

これは、サブアレイが常にフィールド4にある場合にのみ機能しますが、これは必ずしもそうではないと推測しています。また、彼のJSONの構造のために$ fields ['field4'] [0]にする必要があります - 私は私の答えでこの間違いを犯しました。 –

関連する問題