搜索JSON结果

时间:2014-09-06 12:15:27

标签: php json

尝试基于IP构建自动货币转换。

我可以轻松获得2位数的国家代码..

 $remote_IP_url = 'http://ip-api.com/json/' . $_SERVER['REMOTE_ADDR'];
 $remote_user_data = json_decode(file_get_contents($remote_IP_url));
 if ( $remote_user_data->status == 'success' ) {
 $user_country = $remote_user_data->countryCode;
 // do your check and get the currency code w.r.t. the $user_country in the previous line
 echo $user_country;

但我需要将其转换为3位数才能让Google工作。

   $ch = curl_init();
   // 2. set the options, including the url
   curl_setopt($ch, CURLOPT_URL, "http://www.google.com/finance/converter?                     a=".$price."&from=USD&to=".$convertto." ");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
   curl_setopt($ch, CURLOPT_HEADER, 0);
   // 3. execute and fetch the resulting HTML output
   $output = curl_exec($ch);
   // 4. free up the curl handle
   curl_close($ch);
  $data = explode('<div id=currency_converter_result>',$output);
  $data2 = explode('<div id=currency_converter_result>',$data['1']);
  $data3=explode('<span>',$data2['0']);
  $data4=explode('</span>',$data3['1']);
  $data5=explode(' ',$data4['0']);
  return $data5[0];

我在http://country.io/currency.json找到了国家/地区代码到货币代码的来源,结果为...

  {
       "BD": "BDT",
       "BE": "EUR",
       "BF": "XOF",
       "BG": "BGN",
       "BA": "BAM",
       "BB": "BBD",
       "WF": "XPF",
       "BL": "EUR",
       "BM": "BMD",
       "BN": "BND",
       "BO": "BOB",

...

但我不确定如何搜索JSON以获取所需的国家/地区代码并选择货币代码。

2 个答案:

答案 0 :(得分:0)

假设您正在使用PHP 5.4:

$code = "BB";
$jsonString = '{"BB":"BBD","WF":"XPF"}';

$longCode = json_decode($jsonString, true)[$code];

// $longCode == "BBD"

答案 1 :(得分:0)

假设您的$user_country变量确实包含国家/地区代码,您可以从country.io获取JSON,将其转换为数组,并检查该数组中是否存在国家/地区代码密钥。

将JSON从country.io转换为数组并将其放在PHP文件中而不是获取它并在每次请求时将其转换为数组可能是一个更好的主意。

<?php
$currency = json_decode( file_get_contents('http://country.io/currency.json'), true );

if( isset( $currency[ $user_country ] ) )
{
    $currency_code = $currency[ $user_country ];
}
else
{
    $currency_code = 'Not found';
}

echo $currency_code;