@9StarRu

Как сравнить json, найти данные по id и вычислить наибольшую сумму?

По двум url получаю json:

[{"symbol":"IOTXUSDT","price":"0.02014","time":1671464538403},{"symbol":"AUCTIONBUSD","price":"4.9500000","time":1671094714487}]

и
[{"symbol":"IOTXUSDT","price":"0.02015","time":1671464538403},{"symbol":"AUCTIONBUSD","price":"5.9500000","time":1671094714487},{"symbol":"LUNA2BUSD","price":"1.5209000","time":1671464538148},{"symbol":"1000SHIBBUSD","price":"0.0089910","time":1671464538549}]


$response = '[{"symbol":"IOTXUSDT","price":"0.02014","time":1671464538403},{"symbol":"AUCTIONBUSD","price":"4.9500000","time":1671094714487}]';

$response2 = '[{"symbol":"IOTXUSDT","price":"0.02015","time":1671464538403},{"symbol":"AUCTIONBUSD","price":"5.9500000","time":1671094714487},{"symbol":"LUNA2BUSD","price":"1.5209000","time":1671464538148},{"symbol":"1000SHIBBUSD","price":"0.0089910","time":1671464538549}]';

        $json = (json_decode($response));
        $json2 = (json_decode($response2));


Количество данных во втором json больше чем в первом.
Во втором json цены выше чем в первом и могут быть symbol которых вовсе нет в первом json и наоборот.

Как сравнить данные из первого json со вторым по symbol и вычислить price выше не менее чем на 0.1% от price из первого json?
Т.е. найти самую большую разницу цен первого json со вторым и получить в результате его symbol.

Пример (данных в json 1),
1 json:
symbol: IOTXUSDT
price: 0.02014

2 json:
symbol: IOTXUSDT
price: 0.02017

IOTXUSDT во втором json больше чем на 0.1% IOTXUSDT в первом json
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
DanArst
@DanArst
Гриффиндор в моде при любой погоде!
Раз обязательным условием является то, что значение symbol должно содержаться в обоих массивах, то я бы вынес в новый массив $temp данные с массива $json1, где ключ - symbol, а значение - price.
Потом проверить в цикле , есть ли такой ключ в массиве $temp и удовлетворяет ли условию "больше не менее, чем на 0.1%" его значение. Если да, то записываю в новый массив $result.
Далее просто вывод ключа с наибольшим значением.

<?php
$response1 = '[{"symbol":"IOTXUSDT","price":"0.02014","time":1671464538403},{"symbol":"AUCTIONBUSD","price":"4.9500000","time":1671094714487}]';
$response2 = '[{"symbol":"IOTXUSDT","price":"0.02015","time":1671464538403},{"symbol":"AUCTIONBUSD","price":"5.9500000","time":1671094714487},{"symbol":"LUNA2BUSD","price":"1.5209000","time":1671464538148},{"symbol":"1000SHIBBUSD","price":"0.0089910","time":1671464538549}]';
$json1 = json_decode($response1, true);
$json2 = json_decode($response2, true);

$temp = $result = array();

foreach ($json1 as $k) {
    $temp[$k['symbol']] = $k['price'];
}

foreach ($json2 as $v) {
    if (array_key_exists($v['symbol'], $temp)) {
        if ($v['price'] >= ($temp[$v['symbol']] + $temp[$v['symbol']]/1000)) {
            $result[$v['symbol']] = $v['price'];
        }
    }
}

echo array_search(max($result), $result);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы