正确转换货币

我有一个默认货币为美元。


下面的课程部分允许转换不同的货币,但我的问题是转换总是基于欧元作为默认值。


如果选择了如何更新函数以使用美元作为默认值?


谢谢


EUR = 1(默认)USD = 1.10 这种方法适用于任何货币


EUR = 0.9 USD = 1(默认) 这种方法不起作用,因为美元处于默认状态,结果总是如上。


注意: $currenciesAdmin->getAll()以所有带有代码(EUR)和标题(Euro)的货币为例。


EUR 的值始终为 null,因为该转换基于 EUR 作为默认值(有关值,请参阅链接 ecb.europa.eu)


public function getConvertCurrency()

{


  $currenciesAdmin = new CurrenciesAdmin();


  $XML = HTTP::getResponse([

    'url' => 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'

  ]);


  if (empty($XML)) {

    throw new \Exception('Can not load currency rates from the European Central Bank website');

  }


  $currencies = [];


  foreach ($currenciesAdmin->getAll() as $c) {

    $currencies[$c['id']] = null;

  }


  $XML = new \SimpleXMLElement($XML);


  foreach ($XML->Cube->Cube->Cube as $rate) {

    if (array_key_exists((string)$rate['currency'], $currencies)) {

      $currencies[(string)$rate['currency']] = (float)$rate['rate'];

    }

  }


  foreach ($currencies as $code => $value) {

    if (!is_null($value)) {

      try {

        $this->db->save('currencies', [

          'value' => $value,

          'last_updated' => 'now()'

        ], [

          'code' => $code

        ]);

      } catch (\PDOException $e) {

        trigger_error($e->getMessage());

      }

    }

  }

}


大话西游666
浏览 222回答 1
1回答

森林海

通常,您会使用允许您选择基础货币并以这种方式进行转换的 API。也就是说,如果您需要使用此数据集,我相信以下方法可能适合您:$sourceCurrency = 'EUR'; // Your data source uses this as the base value$defaultCurrency = 'USD'; // Read this from desired location$currencies = [];foreach ($currenciesAdmin->getAll() as $c) {&nbsp; $currencies[$c['id']] = null;}// This is a constant$currencies[$sourceCurrency] = 1;$XML = new \SimpleXMLElement($XML);foreach ($XML->Cube->Cube->Cube as $rate) {&nbsp; $code = (string)$rate['currency'];&nbsp; if (array_key_exists($code, $currencies)) {&nbsp; &nbsp; $currencies[$code] = (float)$rate['rate'];&nbsp; }}if ($defaultCurrency !== $sourceCurrency) {&nbsp; // Conversion is required&nbsp; $convertedCurrencies = [];&nbsp; foreach (array_keys($currencies) as $code) {&nbsp; &nbsp; $convertedCurrencies[$code] = $currencies[$code] / $currencies[$defaultCurrency];&nbsp; }&nbsp; $currencies = $convertedCurrencies;}// Use $currencies as normal with the adjusted values下面是一个交互式演示,其中包含您可以在浏览器中测试的 JavaScript 等效代码:(() => {&nbsp; const currencyDropdown = document.querySelector('select');&nbsp; const selForm = document.querySelector('form');&nbsp; const sourceCurrency = 'EUR';&nbsp; let cachedData = null;&nbsp; const generateTable = async(first) => {&nbsp; &nbsp; const defaultCurrency = first ? sourceCurrency : currencyDropdown.options[currencyDropdown.selectedIndex].value;&nbsp; &nbsp; if (cachedData === null)&nbsp; &nbsp; &nbsp; cachedData = await fetch('https://cors-anywhere.herokuapp.com/https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml').then(r => r.text()).then(str => (new window.DOMParser()).parseFromString(str, "text/xml"));&nbsp; &nbsp; let currencies = Array.from(cachedData.querySelectorAll('Cube > Cube > Cube'))&nbsp; &nbsp; &nbsp; .reduce((a, c) => ({ ...a,&nbsp; &nbsp; &nbsp; &nbsp; [c.attributes.currency.value]: parseFloat(c.attributes.rate.value)&nbsp; &nbsp; &nbsp; }), {});&nbsp; &nbsp; currencies.EUR = 1;&nbsp; &nbsp; const currencyKeys = Object.keys(currencies).sort();&nbsp; &nbsp; currencyDropdown.innerHTML = currencyKeys.map(code => `<option${code === defaultCurrency ? ' selected' : ''}>${code}</option>`)&nbsp; &nbsp; if (sourceCurrency !== defaultCurrency) {&nbsp; &nbsp; &nbsp; const convertedCurrencies = currencyKeys.reduce((a, code) => ({&nbsp; &nbsp; &nbsp; &nbsp; ...a,&nbsp; &nbsp; &nbsp; &nbsp; [code]: currencies[code] / currencies[defaultCurrency],&nbsp; &nbsp; &nbsp; }), {});&nbsp; &nbsp; &nbsp; currencies = convertedCurrencies;&nbsp; &nbsp; }&nbsp; &nbsp; let tbl = document.querySelector('table');&nbsp; &nbsp; if (tbl !== null)&nbsp; &nbsp; &nbsp; tbl.remove();&nbsp; &nbsp; tbl = document.createElement('table');&nbsp; &nbsp; tbl.innerHTML = '<tr><th>code</th><th>value</th></tr>' +&nbsp; &nbsp; &nbsp; (currencyKeys.map(&nbsp; &nbsp; &nbsp; &nbsp; code => `<tr><td>${code}</td><td>${currencies[code]} ${defaultCurrency}</td></tr>`).join(''));&nbsp; &nbsp; document.body.appendChild(tbl);&nbsp; &nbsp; selForm.hidden = false;&nbsp; };&nbsp; selForm.addEventListener('submit', (e) => {&nbsp; &nbsp; e.preventDefault();&nbsp; &nbsp; generateTable(false);&nbsp; });&nbsp; generateTable(true);})();<form hidden>&nbsp; <label>Default currency:<select></select><input type="submit"></label></form><table>&nbsp; <tr>&nbsp; &nbsp; <td>Loading&hellip;</td>&nbsp; </tr></table>
打开App,查看更多内容
随时随地看视频慕课网APP