在php中获取api信息

时间:2016-05-23 15:16:07

标签: php json curl

我想使用fixer.io api在php中制作货币转换器 使用mysql 目前这是我的代码

$ch = curl_init();
$url ='http://api.fixer.io/latest';
curl_setopt($ch, CURLOPT_URL, $url);


$json= curl_exec($ch);
curl_close($ch);
$data = json_decode($json);

foreach ($data as $rate){

    $AUD = $rate->AUD;
    $BGN = $rate->BGN;
    $BRL = $rate->BRL;
    $CAD = $rate->CAD;
    $CHF = $rate->CHF;
    $CNY = $rate->CNY;
    $CZK = $rate->CZK;
    $DKK = $rate->DKK;
    $GBP = $rate->GBP;
}

json看起来像我var_dump($ data)

{
    "base": "EUR",
    "date": "2016-05-23",
    "rates": {
        "AUD": 1.5542,
        "BGN": 1.9558,
        "BRL": 3.9832,
        "CAD": 1.4745,
        "CHF": 1.1105,
        "CNY": 7.3507,
        "CZK": 27.033,
        "DKK": 7.4371,
        "GBP": 0.77443,
        "HKD": 8.7104,
        "HRK": 7.489,
        "HUF": 317.05,
        "IDR": 15232.77,
        "ILS": 4.3459,
        "INR": 75.7263,
        "JPY": 122.7,
        "KRW": 1329.78,
        "MXN": 20.6021,
        "MYR": 4.5816,
        "NOK": 9.3658,
        "NZD": 1.6538,
        "PHP": 52.481,
        "PLN": 4.4367,
        "RON": 4.521,
        "RUB": 75.2277,
        "SEK": 9.344,
        "SGD": 1.5478,
        "THB": 39.993,
        "TRY": 3.3495,
        "USD": 1.1215,
        "ZAR": 17.5173
    }
}
int(1))

我想使用费率并将它们放在mysql中。 我的问题是你如何得到所有的费率 当我使用foreach时,我得到了

  

警告:为\ index.php中的foreach()提供的参数无效   12

另一个问题我不明白int(1)来自json的位置(如果我评论foreach我显示像show这里但是如果我取消注释foreach它显示在警告下面

我该如何解决这个问题?欢迎任何帮助!

2 个答案:

答案 0 :(得分:1)

您不需要foreach循环,响应中只有一个rates元素。所以它只是:

$rates = $data->rates;
$AUD = $rates->AUD;
$BGN = $rates->BGN;
...

答案 1 :(得分:0)

您缺少json有效内容中的层次结构。

$data = json_decode($json);
foreach($data->rates as $key=>$value){     // get to the rates array
  $$key = $value;
}

这会动态创建一个名为$ AUD的密钥AUD等等。但是,我会选择另一种方法,您可能在有效负载中包含无效密钥,并且无声地失败。