키 값을 기반으로하는 PHP의 다차원 배열 "결합"

맥스웰 도넬리

배열로 변환하는 두 개의 JSON 개체가 있습니다. 공유 키 ( "locationCode")를 기반으로 두 배열을 결합하고 한 배열에서 다른 배열로 "주소"배열 데이터를 추가해야합니다.

CURL을 사용하여 원격 서버에서 JSON을 성공적으로 가져온 후 배열로 변환합니다.

$json1 = json_decode($jsonresult, true);
$json2 = json_decode($jsonresult2, true);

결과 배열은 다음과 같습니다.

$ json1 :

"maxResults":500,
"events":[
  {
     "eventCode":"20140001",
     "eventId":"72",
     "contact":{
        "contactName":"John Doe",
        "organization":"John Doe Inc.",
        "notes":""
     },
     "location":{
        "locationName":"Company Factory",
        "locationCode":"factory",
        "email":"",
        "phone":"866-123-4567",
        "tollfree":"",
        "fax":"",
        "url":"",
        "notes":""
     },
     "timezone":"(GMT-08:00) Pacific Time (US & Canada)",
     "primaryFormURL":"path/to/form"
  },
  {
     "eventCode":"20140002",
     "eventId":"73",
     "contact":{
        "contactName":"John Doe",
        "organization":"John Doe Inc.",
        "notes":""
     },
     "location":{
        "locationName":"Company HQ",
        "locationCode":"hq",
        "email":"",
        "phone":"866-123-4567",
        "tollfree":"",
        "fax":"",
        "url":"",
        "notes":""
     },
     "timezone":"(GMT-08:00) Pacific Time (US & Canada)",
     "primaryFormURL":"path/to/form"
  },
  {
     "eventCode":"20140003",
     "eventId":"74",
     "contact":{
        "contactName":"John Doe",
        "organization":"John Doe Inc.",
        "notes":""
     },
     "location":{
        "locationName":"Company HQ",
        "locationCode":"factory",
        "email":"",
        "phone":"866-123-4567",
        "tollfree":"",
        "fax":"",
        "url":"",
        "notes":""
     },
     "timezone":"(GMT-08:00) Pacific Time (US & Canada)",
     "primaryFormURL":"path/to/form"
  }
]

$ json2 :

"maxResults":500,
"locations":[
  {
     "numberOfRooms":null,
     "totalSpace":null,
     "address":{
        "line1":"1245 Anystreet, Building 600",
        "line2":"",
        "line3":"",
        "line4":"",
        "city":"Anycity",
        "state":"CA",
        "postalCode":"98765",
        "country":"United States",
        "intlState":""
     },
     "locationCode":"factory",
     "desc":"",
     "url":""
  },
  {
     "numberOfRooms":null,
     "totalSpace":null,
     "address":{
        "line1":"3421 Anystreet, Building 200",
        "line2":"",
        "line3":"",
        "line4":"",
        "city":"Anycity",
        "state":"CA",
        "postalCode":"97654",
        "country":"United States",
        "intlState":""
     },
     "locationCode":"hq",
     "desc":"",
     "url":""
  }
]

이제 "locationCode"키 일치를 기반으로 두 배열을 결합해야합니다. 결합은 $ json2의 "주소"배열 데이터를 적절한 일치 배열 위치의 $ json1에 추가하는 것으로 구성됩니다. 다양한 다차원 배열 반복기를 시도해 왔지만 실제로 필요한 값을 한 배열에서 다른 배열로 선택적으로 이동하는 방법을 파악하는 데 어려움을 겪고 있습니다. 다음과 같이 일치하는 항목을 찾는 반복기가 있습니다.

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($json1));
$iterator2 = new RecursiveIteratorIterator(new RecursiveArrayIterator($json2));
    foreach($iterator as $key1=>$value1) {
        if($key1=="locationCode") {
            foreach($iterator2 as $key2=>$value2) {
                if($key2=="locationCode" && $value1==$value2){
                    echo $key1.' -- '.$value1.':::'.$key2.' -- '.$value2.'<br />';
                }
            }

        }
    }

일치하는 값을 성공적으로 출력합니다. 이제 "주소"배열 데이터를 가져 와서 일치가 식별 된 $ json1 내의 위치에 추가하려면 어떻게해야합니까?

마이크 브랜트

먼저 json2를 locationCode 값을 키로, 주소 개체를 값으로 사용하여 새 배열로 처리합니다. 그런 다음 이벤트 배열을 살펴보고이 배열에서 위치 코드와 일치하는 항목을 찾을 수있는 경우 주소를 추가합니다.

$json1 = json_decode($jsonresult);
$json2 = json_decode($jsonresult2);
// map locations to associative array
$addresses = array();
foreach($json2['locations'] as $location) {
    $addresses[$location->locationCode] = $location->address;
}
// add addresses to events
$events = $json1['events'];
array_walk($events, function (&$event, $key_not_used, $addresses) {
    if(array_key_exists($event->locationCode, $addresses)) {
        $event->address = $addresses[$event->locationCode];
    }
});

OP 업데이트 : 다음은 최종 작동 코드입니다 ...

$json1 = json_decode($jsonresult);
$json2 = json_decode($jsonresult2);

// map locations to associative array
$addresses = array();
foreach($json2->locations as $currlocation) {
    $addresses[$currlocation->locationCode] = $currlocation->address;
}

// add addresses to events
$events = $json1->events;

function add_address(&$event, $key_not_used, $searcharray) {
    if(array_key_exists($event->location->locationCode, $searcharray)) {
        $event->address = $searcharray[$event->location->locationCode];
    }
}

array_walk($events, 'add_address', $addresses);

$merged_events = json_encode($events);
print_r($merged_events);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PHP에서 키 값을 기반으로 2 개의 다른 배열을 병합 / 결합 / 삽입하는 방법

분류에서Dev

PHP는 두 개의 다차원 배열을 결합하고 하나의 배열을 키로 사용합니다.

분류에서Dev

PHP, 다차원 배열의 값 결합

분류에서Dev

Jquery는 두 배열 (키, 값)을 하나의 배열로 연결합니다.

분류에서Dev

서로 다른 차원의 두 배열을 연결합니다.

분류에서Dev

PHP 배열은 오른쪽 키의 값을 결합합니다.

분류에서Dev

두 개의 다차원 배열을 병합하고, 숫자 키를 보존하고, 배열 내부의 값을 결합합니다.

분류에서Dev

PHP는 특정 키의 값이 동일한 두 배열의 하위 배열을 결합합니다.

분류에서Dev

PHP-키 / 값 쌍의 배열을 키 => 값으로 연결합니까?

분류에서Dev

PHP에서 두 개의 다차원 배열을 결합하는 방법

분류에서Dev

PHP 원하는 형식 다차원 결합 배열의 제조

분류에서Dev

인덱스 값을 기반으로 2 차원 배열 결합

분류에서Dev

내부 PHP 배열을 하나의 다차원 배열로 병합-키 값을 기준으로 중복 없음

분류에서Dev

두 배열의 키와 값을 그룹으로 결합

분류에서Dev

다른 배열 값을 공통 키와 결합하는 방법

분류에서Dev

1 차원 배열의 값을 다차원의 키로 만듭니다.

분류에서Dev

배열을 2 차원으로 결합

분류에서Dev

값을 기준으로 Eloquent (Laravel 4.2) 결과를 다차원 배열로 결합

분류에서Dev

다차원 배열을 단일 배열로 결합

분류에서Dev

PHP에서 이차원 배열을 다른 단일 차원 배열과 결합

분류에서Dev

PHP의 키로 다차원 배열 값 비교

분류에서Dev

다차원 배열을 쉼표로 파열 또는 결합

분류에서Dev

왼쪽 배열의 값을 오른쪽 배열의 키로 "결합"하는 배열

분류에서Dev

다차원 배열을 루비 쌍으로 결합

분류에서Dev

다차원 배열을 사용하여 값으로 배열 키

분류에서Dev

bash에서 3 개의 개별 배열을 하나의 다차원 배열로 결합

분류에서Dev

다차원 배열은 동일한 id (key)의 값을 연결합니다.

분류에서Dev

가장 낮은 키 가져 오기-다차원 배열의 배열 값 PHP

분류에서Dev

하위 값을 기반으로 다차원 배열의 하위 배열 병합

Related 관련 기사

  1. 1

    PHP에서 키 값을 기반으로 2 개의 다른 배열을 병합 / 결합 / 삽입하는 방법

  2. 2

    PHP는 두 개의 다차원 배열을 결합하고 하나의 배열을 키로 사용합니다.

  3. 3

    PHP, 다차원 배열의 값 결합

  4. 4

    Jquery는 두 배열 (키, 값)을 하나의 배열로 연결합니다.

  5. 5

    서로 다른 차원의 두 배열을 연결합니다.

  6. 6

    PHP 배열은 오른쪽 키의 값을 결합합니다.

  7. 7

    두 개의 다차원 배열을 병합하고, 숫자 키를 보존하고, 배열 내부의 값을 결합합니다.

  8. 8

    PHP는 특정 키의 값이 동일한 두 배열의 하위 배열을 결합합니다.

  9. 9

    PHP-키 / 값 쌍의 배열을 키 => 값으로 연결합니까?

  10. 10

    PHP에서 두 개의 다차원 배열을 결합하는 방법

  11. 11

    PHP 원하는 형식 다차원 결합 배열의 제조

  12. 12

    인덱스 값을 기반으로 2 차원 배열 결합

  13. 13

    내부 PHP 배열을 하나의 다차원 배열로 병합-키 값을 기준으로 중복 없음

  14. 14

    두 배열의 키와 값을 그룹으로 결합

  15. 15

    다른 배열 값을 공통 키와 결합하는 방법

  16. 16

    1 차원 배열의 값을 다차원의 키로 만듭니다.

  17. 17

    배열을 2 차원으로 결합

  18. 18

    값을 기준으로 Eloquent (Laravel 4.2) 결과를 다차원 배열로 결합

  19. 19

    다차원 배열을 단일 배열로 결합

  20. 20

    PHP에서 이차원 배열을 다른 단일 차원 배열과 결합

  21. 21

    PHP의 키로 다차원 배열 값 비교

  22. 22

    다차원 배열을 쉼표로 파열 또는 결합

  23. 23

    왼쪽 배열의 값을 오른쪽 배열의 키로 "결합"하는 배열

  24. 24

    다차원 배열을 루비 쌍으로 결합

  25. 25

    다차원 배열을 사용하여 값으로 배열 키

  26. 26

    bash에서 3 개의 개별 배열을 하나의 다차원 배열로 결합

  27. 27

    다차원 배열은 동일한 id (key)의 값을 연결합니다.

  28. 28

    가장 낮은 키 가져 오기-다차원 배열의 배열 값 PHP

  29. 29

    하위 값을 기반으로 다차원 배열의 하위 배열 병합

뜨겁다태그

보관