foreach($rates['currency'] as $rate) {
if($rate['from'] === $amountCurrency && $rate['to'] === $targetCurrency) {
$directRate = $rate;
}
if($rate['from'] === $targetCurrency && $rate['to'] === $amountCurrency) {
$reversedRate = $rate;
}
}
Поскольку строки с $rate['from'] === "USD" и $rate['to'] === "RUB" в массиве нету, то $directRate останется равной null.
Поскольку в массиве есть две строки с $rate['from'] === "RUB" и $rate['to'] === "USD", то в $reversedRate будет записана последняя из этих строк, {"from":"RUB","to":"USD","operationType":"buy","value":"75.65"}.
if ($directRate) {
....
}
Этот блок не выполнится, так как в $directRate записан null.
if ($reversedRate) { // На эту строку не обращать внимания
if ($reversedRate['operationType'] == 'buy') {
$amountConverted = $reversedRate['value'];
} elseif ($directRate['operationType'] == 'sell') {
$amountConverted = $reversedRate['value'];
}
}
Здесь сработает ветка с $reversedRate['operationType'] == 'buy' и в $amountConverted запишется "75.65".
Всё работает в точности так, как вы написали в своей программе.
Для того, чтобы что-то переписать, надо знать, что именно вы рассчитываете получить при таких входных данных и почему.
Предположу, что в случае совпадения пары валют вам нужна ветка buy, а в случае обратного их расположения - ветка sell. Тогда будет так:
$conversionRate = null;
foreach($rates['currency'] as $rate) {
if (($rate['operationType'] === 'buy' &&
$rate['from'] === $amountCurrency &&
$rate['to'] === $targetCurrency) ||
($rate['operationType'] === 'sell' &&
$rate['from'] === $targetCurrency &&
$rate['to'] === $amountCurrency)
) {
$conversionRate = $rate['value'];
}
}
var_dump($conversionRate);