Сравнение двух json php и запись в третий
1.json
{
"status": "ok",
"data": {
"accountid": [
{
"all": {
"wins": 7,
"losses": 2,
"battles": 9
},
"id": 22
},
{
"all": {
"wins": 4,
"losses": 3,
"battles": 7
},
"id": 130
},
{
"all": {
"wins": 1,
"losses": 2,
"battles": 3
},
"id": 302
}
]
}
}
2.json
{
"status": "ok",
"data": {
"accountid": [
{
"all": {
"wins": 11,
"losses": 4,
"battles": 15
},
"id": 22
},
{
"all": {
"wins": 4,
"losses": 3,
"battles": 7
},
"id": 130
},
{
"all": {
"wins": 17,
"losses": 12,
"battles": 29
},
"id": 102 // добавился новый объект с новым id, этот объект отсутствует в 1.json и должен добавиться в новый json
},
{
"all": {
"wins": 4,
"losses": 3,
"battles": 7
},
"id": 302
}
]
}
}
Новый 3.json должен получиться таким:
{ // объект c id 130 исключен, т.к. значения остались прежними
"status": "ok",
"data": {
"accountid": [
{// значения поменялись, поэтому посчиталась разница
"all": {
"wins": 4,
"losses": 2,
"battles": 6
},
"id": 22
},
{//значения поменялись, поэтому посчиталась разница
"all": {
"wins": 3,
"losses": 1,
"battles": 4
},
"id": 302
},
{ // новый объект, которого не было в 1.json
"all": {
"wins": 17,
"losses": 12,
"battles": 29
},
"id": 102
}
]
}
}
Работающий скрипт, если объекты всегда с одинаковым id в 1.json и 2.json
function compare($one, $two) {
$double = [];
foreach($two as $key2 => $val2) {
if(!isset($one[$key2])) {
$double[$key2] = $val2;
continue;
}
$val = $one[$key2];
if(is_array($val2) && is_array($val)) {
$double[$key2] = compare($val, $val2);
} else if ($val2 != $val) {
$double[$key2] = $val2 - $val;
}
if (isset($one['id']));
{
unset ($one['id']);
}
if(!isset($double[$key2]['all']))
{unset ($double[$key2]['id']);}
if(empty($double[$key2]['all']))
{unset ($double[$key2]['all'], $double[$key2]['id']);}
if(empty($double[$key2]))
{unset ($double[$key2]);}
}
return $double;
}
$json1 = json_decode(file_get_contents('1.json'), true);
$json2 = json_decode(file_get_contents('2.json'), true);
file_put_contents('3.json', json_encode(compare($json1, $json2), JSON_PRETTY_PRINT));
Сравниваться должны два объекта с одинаковым id
-если есть id и разница в значениях в [all], то вычитаем значения
-если есть id и одинаковые значениях в [all], то исключаем
-если есть id в json2 и нет в json1, то добавляем в новый json
Помогите пожалуйста найти решение.