2017-10-25 14 views
0

下記のように私は、上記のJSONで動的キー値を持つ配列をグループ化しますか?

{ 
    "test_details": [ 
    { 
     "test_id": "001", 
     "test_name": "Blood Test", 
     "group_name": "Group 1", 
     "package_details": [ 
     { 
      "package_name": "master health checkup", 
      "package_id": "1" 
     }, 
     { 
      "package_name": "special camp package", 
      "package_id": "2" 
     } 
     ] 
    }, 
    { 
     "test_id": "002", 
     "test_name": "haemoglobin", 
     "group_name": "Group 2", 
     "package_details": [ 
     { 
      "package_name": "master health checkup", 
      "package_id": "1" 
     } 
     ] 
    }, 
    { 
     "test_id": "003", 
     "test_name": "creatine test", 
     "group_name": "Group 2", 
     "package_name": null 
    } 
    ] 
} 

をJSON配列値を持って、私は、パッケージ名に対してテストリストを注文したい意味し、キーpackage_nameによって値グループ化します。

私はいくつかの配列グループを関数で試みましたが、動的キーpackage_nameのために働いていません。

私の最終的な出力JSONは次のようになります。ここ

{ 
    "test_details": { 
    "master health checkup": [ 
     { 
     "test_id": "001", 
     "test_name": "Blood Test", 
     "group_name": "Group 1", 
     "package_details": [ 
      { 
      "package_name": "master health checkup", 
      "package_id": "1" 
      }, 
      { 
      "package_name": "special camp package", 
      "package_id": "2" 
      } 
     ] 
     }, 
     { 
     "test_id": "002", 
     "test_name": "haemoglobin", 
     "group_name": "Group 2", 
     "package_details": [ 
      { 
      "package_name": "master health checkup", 
      "package_id": "1" 
      } 
     ] 
     } 
    ], 
    "special camp package": [ 
     { 
     "test_id": "001", 
     "test_name": "Blood Test", 
     "group_name": "Group 1", 
     "package_details": [ 
      { 
      "package_name": "master health checkup", 
      "package_id": "1" 
      }, 
      { 
      "package_name": "special camp package", 
      "package_id": "2" 
      } 
     ] 
     } 
    ] 
    } 
} 

あなたは1つのテストを持っている 2つのテストや下と同じよう特別なキャンプのパッケージを持ってマスター健康診断を見ることができます。これを達成する方法は?配列キーが動的であるときに配列グループを適用する方法は?

+0

あなたの希望の出力をそこに入れることができますか? –

+1

@EmilioGort既に存在していましたが、別のエディタが何らかの理由で削除しました。私はそれを取り戻す。 –

答えて

0

JSONをデコードした後、test_detailsを繰り返します。テストにpackage_detailsプロパティがある場合、それを繰り返し、各パッケージ名をキーとしてテストを結果配列に割り当てます。

$data = json_decode($json); 

foreach ($data->test_details as $test) { 
    if (isset($test->package_details)) { 
     foreach ($test->package_details as $package) { 
      $result['test_details'][$package->package_name][] = $test; 
     } 
    } 
} 

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