Сравнение двух 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 

Помогите пожалуйста найти решение.


Ответы (0 шт):