我正在使用谷歌金融计算器转换货币。我必须转换至少= 2000个数字才能立即转换。下面我在数组中只设置了10个数字。当我运行此代码时,它工作正常,但它花费了太多时间。当我尝试使用大约5000个数字时,它有时会超时错误。任何人都可以帮助我如何使用我的代码修改大量数据。谢谢。以下是我目前使用的代码。
$amounts= array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
$from_Curr ='USD';
$to_Curr = 'THB';
$convertedCurrency = convertCurrency($amounts, $from_Curr, $to_Curr);
print_r($convertedCurrency);
function convertCurrency($amounts= array(), $from, $to){
$convertedCurrency = array();
foreach ($amounts as $amount) {
$url = "https://www.google.com/finance/converter?a=$amount&from=$from&to=$to";
$data = file_get_contents($url);
preg_match("/<span class=bld>(.*)<\/span>/",$data, $converted);
$converted = preg_replace("/[^0-9.]/", "", $converted[1]);
array_push($convertedCurrency, round($converted, 3));
}
return $convertedCurrency;
}
答案 0 :(得分:2)
让我们假设一个请求在50毫秒内得到了答案,您可以自己为5000个请求进行计算......
更改接近问题的方法:汇率是线性的,因此您只需要一个答案,并且您可以在没有API的情况下进行交换计算。乘法运算比API请求快得多。向API询问1美元的计数器值,然后将每个美元金额乘以获得的值:
$amounts = array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
$from_Curr = 'USD';
$to_Curr = 'THB';
$convertedCurrency = convertCurrency($amounts, $from_Curr, $to_Curr);
print_r($amounts);
print_r($convertedCurrency);
function convertCurrency($amounts = array(), $from, $to) {
$convertedCurrency = array();
$amount = 1;
$url = "https://finance.google.com/finance/converter?a=$amount&from=$from&to=$to";
$data = file_get_contents($url);
preg_match("/<span class=bld>(.*?)<\/span>/", $data, $converted);
$converted = preg_replace("/[^0-9.]/", "", $converted[1]);
foreach ($amounts as $amount) {
$convertedCurrency[] = $amount * $converted;
}
return $convertedCurrency;
}
旁注:将正则表达式更改为非贪婪的匹配(。*?),以防在页面中添加了跨度。
答案 1 :(得分:1)
您使用的是免费服务吗?这可能是你收到超时错误的原因。 请求服务响应是有限制的,这就是达到该限制时出错的原因。 e.i在特定时间段内有多少请求
您要么寻找可以满足您要求的付费服务(一次5000个回复)
或者将您的请求更改为次数(小于5000)。
对于代码本身,我知道foreach被认为是缓慢的,尝试另一种循环解决方案。