@rusgayfer

Как перевести курс валют?

Есть код:

<?php 
  // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru 
  $content = get_content(); 
  // Разбираем содержимое, при помощи регулярных выражений 
  $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"; 
  preg_match_all($pattern, $content, $out, PREG_SET_ORDER); 
  $dollar = ""; 
  $euro = "";
  $pln  = "";
  foreach($out as $cur) 
  { 
    if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]); 
    if($cur[2] == 978) $euro   = str_replace(",",".",$cur[4]);
	if($cur[2] == 985) $pln   = str_replace(",",".",$cur[4]); 
  }
  // echo "USD ".$dollar."&nbsp;"; //выводит доллар
  // echo "EUR ".$euro.""; // выводит евро
  function get_content() 
  { 
    // Формируем сегодняшнюю дату 
    $date = date("d/m/Y"); 
    // Формируем ссылку 
    $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; 
    // Загружаем HTML-страницу 
    $fd = fopen($link, "r"); 
    $text=""; 
    if (!$fd) echo "Запрашиваемая страница не найдена"; 
    else 
    { 
      // Чтение содержимого файла в переменную $text 
      while (!feof ($fd)) $text .= fgets($fd, 4096); 
    } 
    // Закрыть открытый файловый дескриптор 
    fclose ($fd); 
    return $text; 
  } 
?>


Вывожу на изображение так:
$bg->annotateImage($draw, $valuta_subscribe_text_pixel_x, $valuta_subscribe_text_pixel_y, 0, mb_strtoupper('USD: '.$dollar.' EUR: '.$euro.' PLN: '.$pln, 'UTF-8'));


Как перевести чтобы злотый (PLN) был в гривнах (UAH), а доллар (USD) и евро (EUR) в злотых (PLN)
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
larisamoroz
@larisamoroz
Курю маны, втыкаю в код, ваяю, починяю.
$pattern = "#<Valute ID=\"(?<id>[^\"]+)[^>]+>[^>]+>(?<code>[^<]+)[^>]+>[^>]+>(?<charCode>[^<]+)[^>]+>[^>]+>(?<nom>[^<]+)[^>]+>[^>]+>(?<name>[^<]+)[^>]+>[^>]+>(?<value>[^<]+)#i"; 
  preg_match_all($pattern, $content, $out, PREG_PATTERN_ORDER); 
  $codes = array_flip($out['charCode']);
  //echo var_export($codes);
  $curs = ['USD'=>[],'EUR'=>[],'PLN'=>[],'UAH'=>[]];
  foreach($curs as $curency=>$data) 
  { 
    $cur_index = $codes[$curency];
    $curs[$curency]['nom'] = intval($out['nom'][$cur_index]);
    $curs[$curency]['value'] = str_replace(",",".",$out['value'][$cur_index]);
  }
  
  $curs['USD']['trans'] = number_format($curs['USD']['value']/$curs['PLN']['value'],2);
  $curs['EUR']['trans'] = number_format($curs['EUR']['value']/$curs['PLN']['value'],2);
  $curs['PLN']['trans'] = number_format($curs['PLN']['value']/$curs['UAH']['value']*$curs['UAH']['nom'],2);
  
  //echo var_export($curs);
  $bg->annotateImage($draw, $valuta_subscribe_text_pixel_x, $valuta_subscribe_text_pixel_y, 0, mb_strtoupper('USD: '.$curs['USD']['trans'].' EUR: '.$curs['EUR']['trans'].' PLN: '.$curs['PLN']['trans'], 'UTF-8'));

</code>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Exomode
@Exomode
Архитектор ПО
Как я понял, вы получаете курсы в соотношении пары к одной и той же валюте (рубль), верно? То есть, у вас уже есть непрямая связь между всеми валютами, дальше чистая арифметика:

1 грн = 2.5 руб
1 доллар = 60 руб

1 доллар = 60 / 2.5 = 24 грн

Имейте ввиду, что у нацбанков свои курсы и результаты рассчетов валютных пар вряд ли будут совпадать с действительностью, лучше всего парсить раз в сутки сайт-донор курсов валютных пар и брать уже готовые данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы