2017-02-08 21 views
-1

私は周りを少しずつ検索しますが、まさに私が何をしたのか、何かを見つけ出して、PHPのサブ配列を使ってオブジェクトの配列をオブジェクトに変換する

[ 
    { 
     "datetime": "20170208183021", 
     "ping": "11.201858520507812", 
     "download": "28129628.324328355", 
     "upload": "65169139.37489863" 
    }, 
    { 
     "datetime": "20170208181514", 
     "ping": "7.826685905456543", 
     "download": "300487650.87967044", 
     "upload": "128210163.86553746" 
    }, 
    { 
     "datetime": "20170208180034", 
     "ping": "19.550085067749023", 
     "download": "17300126.504837424", 
     "upload": "16650978.464359928" 
    } 
] 

私はこのフォーマットにすべてを変換したい:私は最善の方法を推測している

{ 
    "datetime": [ 
     "20170208183021", 
     "20170208181514", 
     "20170208180034" 
    ], 
    "ping": [ 
     "11.201858520507812", 
     "7.826685905456543", 
     "19.550085067749023" 
    ], 
    "download": [ 
     "28129628.324328355", 
     "300487650.87967044", 
     "17300126.504837424" 
    ], 
    "upload": [ 
     "65169139.37489863", 
     "128210163.86553746", 
     "16650978.464359928" 
    ] 
} 

が使用する

は私がDBからこの形式でデータを持っています私はどうしたのか分からなかった。どんな助けもありがとう。

答えて

0

ここに実際の例があります。あなたは何も想像する必要はありません、単純なforeachはトリックを行います。

$json = <<<EOS 
[ 
    { 
     "datetime": "20170208183021", 
     "ping": "11.201858520507812", 
     "download": "28129628.324328355", 
     "upload": "65169139.37489863" 
    }, 
    { 
     "datetime": "20170208181514", 
     "ping": "7.826685905456543", 
     "download": "300487650.87967044", 
     "upload": "128210163.86553746" 
    }, 
    { 
     "datetime": "20170208180034", 
     "ping": "19.550085067749023", 
     "download": "17300126.504837424", 
     "upload": "16650978.464359928" 
    } 
] 
EOS; 

$array = \json_decode($json, true); 
$results = [ 
    'datetime' => [], 
    'ping'  => [], 
    'download' => [], 
    'upload' => [], 
]; 

foreach ($array as $value) { 
    $results['datetime'][] = $value['datetime']; 
    $results['ping'][]  = $value['ping']; 
    $results['download'][] = $value['download']; 
    $results['upload'][] = $value['upload']; 
} 

$results = \json_encode($results, JSON_PRETTY_PRINT); 
echo $results; 
+0

あなたが提案したものを使いこなした後、単にforeach($ array as $ value){foreach($ value as $ key => $ val){$ data [$ key] [ ] = $ val; }} '。 PHPはそれが行くように必要なすべての親キーを作成するようだ:) –

+0

あなたは間違った答えにコメントしましたか?あなたが使ったばかりのコードは、他の答えから直接得られたものです。 – AbraCadaver

0

JSONですので、あなたは配列としてそれをデコードすると仮定すると:

$array = json_decode($json, true); 

かかわらず、キー名を取得し、それらを抽出する方法多くのキー、ちょうどループ1の動的に構築するには:

foreach($array[0] as $key => $val) { 
    $result[$key] = array_column($array, $key); 
} 

A長い道周り:

foreach($array as $values) { 
    foreach($values as $key => $val) 
    $result[$key][] = $val; 
} 

エンコードされたときには、オブジェクトになります。

$array = json_encode($result); 
関連する問題