我制作了一个PHP函数,该函数与API配合使用,向我显示帐户的美元余额。此函数称为:get_balance
function get_balance($account){
$url = 'http://mycompaniesurl.com/' . $account; // url of website
global $response;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$response = curl_exec($ch);
curl_close($ch);
}
函数get_balance返回变量$response 中的输出
我确信这个函数是有效的,所以我对这个部分没有任何疑问。然而,我正在尝试处理CSV文件中写下的帐号。我用以下代码调用CSV文件:
$file = new SplFileObject("test.csv");
$file->setFlags(SplFileObject::READ_CSV);
$data = call_user_func_array('array_merge', iterator_to_array($file));
$data = array_combine(range(1, count($data)), $data);
extract($data, EXTR_PREFIX_ALL, 'variable');
我正在用一个名为test.csv的csv文件测试我的代码,该文件包含4个地址(第一个地址的余额为0,其他3个地址的差额大于0)。
使用以下代码,我可以在屏幕上打印账号的余额:
get_balance($data[2]);
if ($response > 0){
echo $response,"---------------",$data[2];
}
由于$data[1]
的余额为0,因此不打印任何内容。$data[2]
、$data[3]
和$data[4]
的余额大于0,因此它们会将余额与帐号一起返回。
现在我的问题是什么;有没有办法"自动"做到这一点?类似的东西
get_balance($data[]);
似乎不起作用。这个php文件必须处理的CSV大约有1000个帐号,将来可能会有更多,所以键入get_balance($data[1])
到get_balance($data[999])
将是一项耗时的工作。
有没有一种(简单的)方法可以将该函数应用于所有$data[]
?
是的,有,称为array_map
:
$balanced_data = array_map("get_balance", $data);
这将使$balanced_data
为空,因为此时get_balance
没有返回,但使用全局变量。将其更改为类似的内容
function get_balance($account){
$url = 'http://mycompaniesurl.com/' . $account; // url of website
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
如果你不想或不能更改get_balance
,你需要一个像这样的变通方法
$max = count($data);
for ($i=0; $i<$max; $i++) {
$response = 0; // reset to make sure we get a new value
get_balance($data[$i]);
$balanced_data[$i] = $response;
}