Как определить разницу в цене криптовалюты с использованием PHP?

Как написать функцию на PHP для сравнения данных о криптовалютах, получаемых из двух различных API? Я получаю информацию в следующем формате: 

<br/> BTC/USDT | 136.030 <br/> ETC/USDT | 3.030 <br/> DOGE/USDT | 0.035 <br/> 

Данные из обоих API структурированы одинаково. Если названия валютной пары совпадают, но цены различаются, нужно отобразить эти цены. Если цены идентичны, то функция должна продолжать сравнение следующих пар, пока не найдёт отличия в ценах. Заранее спасибо за помощь!
  • 27 января 2025 г. 8:04
Ответы на вопрос 1
Для начала, вам потребуется две функции для извлечения данных о ценах из двух разных API. Предполагаем, что данные приходят в виде строки, как в вашем примере. Мы будем использовать эти строки и преобразуем их в ассоциативные массивы для удобного сравнения.

Вот пример функции, которая сравнивает цены по валютным парам из двух API:

```php
function parseApiData($data) {
    $lines = explode("\n", trim($data)); // Предполагаем, что строки разделены переводом строки
    $prices = [];

    foreach ($lines as $line) {
        if (preg_match('/^(.*?) \| ([\d.]+)$/', $line, $matches)) {
            $pair = trim($matches[1]);
            $price = (float)trim($matches[2]);
            $prices[$pair] = $price;
        }
    }

    return $prices;
}

function comparePrices($apiData1, $apiData2) {
    $prices1 = parseApiData($apiData1);
    $prices2 = parseApiData($apiData2);

    $differences = [];

    foreach ($prices1 as $pair => $price1) {
        if (isset($prices2[$pair])) {
            $price2 = $prices2[$pair];
            if ($price1 !== $price2) {
                $differences[] = [
                    'pair' => $pair,
                    'price_api1' => $price1,
                    'price_api2' => $price2,
                ];
            }
        }
    }

    return $differences;
}

// Пример данных из двух API
$apiData1 = "BTC/USDT | 136.030\nETC/USDT | 3.030\nDOGE/USDT | 0.035";
$apiData2 = "BTC/USDT | 136.050\nETC/USDT | 3.030\nDOGE/USDT | 0.036";

// Сравниваем данные
$differences = comparePrices($apiData1, $apiData2);

// Выводим различия
if (!empty($differences)) {
    foreach ($differences as $difference) {
        echo "Разница для валютной пары {$difference['pair']}:\n";
        echo "Цена из API 1: {$difference['price_api1']}\n";
        echo "Цена из API 2: {$difference['price_api2']}\n\n";
    }
} else {
    echo "Цены совпадают для всех валютных пар.";
}
```

### Объяснение функции:

1. **parseApiData** — эта функция принимает строку данных и разбивает её на отдельные строки, проверяя каждую строку на соответствие ожидаемому формату. В случае совпадения, пара и цена добавляются в ассоциативный массив `$prices`, где ключом является название валютной пары, а значением — цена.

2. **comparePrices** — эта функция принимает две строки с данными из API, вызывает `parseApiData` для каждой из них, а затем сравнивает полученные массивы. Если цены не совпадают, информация о различиях добавляется в массив `$differences`.

3. После сравнения выводится информация о парах, для которых цены различаются, или сообщение о том, что все цены совпадают.

Вы можете использовать эту структуру и адаптировать её под свои нужды, например, добавив дополнительные проверки и логику обработки ошибок.
Похожие вопросы