У меня есть два объекта JSON, которые я конвертирую в массивы. Мне нужно объединить два массива на основе общего ключа ("locationCode") и добавить данные массива "адрес" из одного массива в другой.
После того, как я успешно извлек JSON с удаленного сервера с помощью CURL, я конвертирую их в массивы:
$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, где было идентифицировано совпадение?