2016-10-01 2 views
1

I처럼 보이는 JSON 배열을 갖는다. 되풀이 키 값을 추출해야하며 한 번만 보내야합니다.병합 JSON 배열

{ 
     "error": false, 
     "service_prov_type": "Doctor", 
     "service_prov_name": "Dr. Test", 
     "addr_street": "xxx Street", 
     "service_prov_services": [ 
      { 
       "service_type": "Früherkennung und Vorsorge", 
       "service_measure": "Darmkrebsfrüherkennung 
          (Schnelltest, Koloskopie)","Gesundheits- 
          Check-up" 
      }, 
      { 
       "service_type": "Gesundheitskurse", 
       "service_measure": "Suchtmittelkonsum", 
          "Stressbewältigung oder Entspannung" 
      }, 
      { 
       "service_type": "Sport und Gesundheit", 
       "service_measure": "Schutzimpfung", 
      } 
     ] 
    } 

누구든지이 작업을 수행 할 수 있습니다. 배열을 usort로 정렬 할 수 있지만 반복 키를 추출 할 수 없습니다.

+0

당신이 시도 것을 지금까지 내가 PHP.That에 정렬 방법을 모르는 –

+0

되어 보여주십시오 나에게 올바른 방향으로 나와 – Stefan

답변

1

는이 길을 따를 수 :

  1. 키 $의 service_prov_services을 통해 json_decode에게
  2. 으로 반복을 사용하여 PHP 배열로 JSON 변환합니다. 과정에서 :
    a) service_type을 배열에 저장하십시오. 아이템이이 값에 속하는지 반복 체크 할 때마다
    b) 그렇지 않으면 새로운 콜렉션을 생성하고 푸시합니다.
    당신이 service_prov_services
  3. service_type
  4. 사용이 컬렉션의 컬렉션이있을 것이다 루프의 끝에서
    1. 을로 json_encode
를 사용하여 JSON으로 다시 배열을 변환

업데이트

귀하의 결과 JSON은 service_mea 문자열이 아니라 배열로 확인하십시오. 내 코드는이를 배열로 제공합니다. 매퍼에 UTF8 키를 저장하는 것을 제외하고는 정확히 동일한 단계를 수행했습니다.

<?php 

ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

$json = <<<EOF 
{ 
    "error": false, 
    "service_prov_services": [ 
     { 
      "service_measure": "Darmkrebsfr?herkennung (Schnelltest, Koloskopie)", 
      "service_prov_type": "Doctor", 
      "service_type": "Fr?herkennung und Vorsorge", 
      "service_prov_name": "Dr. Test", 
      "addr_street": "xxx Street" 
     }, 
     { 
      "service_measure": "Gesundheits-Check-up", 
      "service_prov_type": "Doctor", 
      "service_type": "Fr?herkennung und Vorsorge", 
      "service_prov_name": "Dr. Test", 
      "addr_street": "xxx Street" 
     }, 
     { 
      "service_measure": "Suchtmittelkonsum", 
      "service_prov_type": "Doctor", 
      "service_type": "Gesundheitskurse", 
      "service_prov_name": "Dr. Test", 
      "addr_street": "xxx Street" 
     }, 
     { 
      "service_measure": "Stressbew?ltigung oder Entspannung", 
      "service_prov_type": "Doctor", 
      "service_type": "Gesundheitskurse", 
      "service_prov_name": "Dr. Test", 
      "addr_street": "xxx Street" 
     }, 
     { 
      "service_measure": "Schutzimpfung", 
      "service_prov_type": "Doctor", 
      "service_type": "Sport und Gesundheit", 
      "service_prov_name": "Dr. Test", 
      "addr_street": "xxx Street" 
     } 
    ] 
} 
EOF; 

$listArr = json_decode($json, TRUE); 

$service_type = array(); 
$service_prov_services = array(); 

$mapper = array(); 
$entry_list = array(); 
$mapIndex = 0; //initialize map index at zero 


foreach($listArr['service_prov_services'] as $collection){ 

    if(in_array($collection['service_type'], array_values($mapper))){ 
      //make edit to existing entry by pusing service_measure 

      //extract the index from mapper now 
      foreach($mapper as $key=>$value){ 
       if($value == $collection['service_type']){ 
        $needle = $key; 
        break; 
       } 
      } 

      $arr_service_measure_old = (array)$entry_list[$needle]['service_measure']; 
      $arr_service_measure_old[] = $collection['service_measure']; 

      //update the array 
      $entry_list[$needle] = array(
       'service_type'  => $collection['service_type'], 
       'service_measure' => $arr_service_measure_old, 
      ); 

    }else{ 
      //new entry needs to be made 
      $currentMapIndex = $mapIndex; 
      $mapper[$mapIndex++] = $collection['service_type']; 

      $entry_list[$currentMapIndex] = array(
       'service_type'  => $collection['service_type'], 
       'service_measure' => $collection['service_measure'], 
      ); 

    } 

} 

echo json_encode($entry_list); 

생성 된 JSON은 다음과 같습니다 누구나 지적 할 수 있다면 내가 여기에 요청하고 왜

[ 
    { 
     "service_type": "Fr?herkennung und Vorsorge", 
     "service_measure": [ 
      "Darmkrebsfr?herkennung (Schnelltest, Koloskopie)", 
      "Gesundheits-Check-up" 
     ] 
    }, 
    { 
     "service_type": "Gesundheitskurse", 
     "service_measure": [ 
      "Suchtmittelkonsum", 
      "Stressbew?ltigung oder Entspannung" 
     ] 
    }, 
    { 
     "service_type": "Sport und Gesundheit", 
     "service_measure": "Schutzimpfung" 
    } 
] 
+0

코드에서이 작업을 수행하는 방법을 알려주시겠습니까? 나는별로 숙련되지 않았으며 많은 도움이 될 것입니다. – Stefan