2017-10-25 4 views
0

I JSON Array-Werte haben, wie unten angegeben,Gruppieren Sie ein Array mit dynamischen Schlüsselwerten?

{ 
    "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 
    } 
    ] 
} 

In der obigen JSON, ich will die Werte durch den Schlüssel package_name, zu gruppieren, was bedeutet, ich will die Testliste gegen die Paketnamen bestellen.

Ich habe mehrere Array-Gruppe nach Funktionen versucht, aber für einen dynamischen Schlüssel package_name funktioniert es nicht.

Meine letzte Ausgabe JSON wäre:

{ 
    "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" 
      } 
     ] 
     } 
    ] 
    } 
} 

Hier können Sie die Master Gesundheitscheck haben 2 Tests und unter und gleichen wie Speziallager Paket sehen 1-Test haben. Wie erreiche ich das? Wie wird eine Array-Gruppe angewendet, wenn der Array-Schlüssel dynamisch ist?

+0

Können Sie ein Beispiel Ihrer Wunschausgabe dort setzen? –

+1

@EmilioGort es war schon da, aber ein anderer Editor löschte es aus irgendeinem Grund. Ich lege es zurück. –

Antwort

0

Nach der Dekodierung der JSON, iterieren Sie die test_details. Wenn ein Test eine package_details-Eigenschaft hat, dann iterieren Sie diese und weisen Sie den Test dem Ergebnis-Array zu, wobei Sie den Namen jedes Pakets als Schlüssel verwenden.

$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); 
Verwandte Themen