我有这个函数,historicalBootstrap,我想用它将三个不同的数据集放入页面中:
$years = array(
date('Y-m-d', strtotime('1 year ago')). ".json",
date('Y-m-d', strtotime('2 years ago')). ".json",
date('Y-m-d', strtotime('3 years ago')). ".json"
);
function historicalBootstrap($years, $id){
for($i = 0; $i < 3; $i++){
$date = $years[$i];
$i = curl_init("http://openexchangerates.org/api/historical/{$date}?app_id={$id}");
curl_setopt($i, CURLOPT_RETURNTRANSFER, 1);
$jsonHistoricalRates = curl_exec($i);
curl_close($i);
$i = json_decode($jsonHistoricalRates);
echo '<script>_'. $i . 'historical = '. json_encode($historicalRates) . ' ; ' . '</script>';
}
}
historicalBootstrap($years, $appId);
我似乎可以使用这种方法发出一个请求,例如在功能块之外。为什么当我将这种方法抽象到historicalBootstrap函数中时它失败了?我期待三个(_0 = ...,_1 = ...,_2 = ...)引导脚本。
谢谢。
答案 0 :(得分:1)
您正在使用$i
来控制for
循环,还包含curl句柄以及包含json解码结果。
您还要对返回的json进行解码,然后再次直接对其进行编码,而不是必需的。
尝试将其更改为
function historicalBootstrap($years, $id){
for($i = 0; $i < 3; $i++){
$date = $years[$i];
$ch = curl_init("http://openexchangerates.org/api/historical/{$date}?app_id={$id}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonHistoricalRates = curl_exec($ch);
curl_close($ch);
echo '<script>_'. $i . 'historical = '. $jsonHistoricalRates . ';' . '</script>';
}
}
您还可以使用foreach()
代替for
function historicalBootstrap($years, $id){
foreach ($years as $i => $year) {
$ch = curl_init("http://openexchangerates.org/api/historical/{$year}?app_id={$id}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonHistoricalRates = curl_exec($ch);
curl_close($ch);
echo '<script>_'. $i . 'historical = '. $jsonHistoricalRates . ';' . '</script>';
}
}
现在,如果你将4年时间用于该功能,则不需要修改此代码。