我正在使用PHP的cURL库执行一个API请求。输出为XML,如下所示:
<xml>
<urlnext>
<list>
<list1>
<list2>
<list3>
在得到这个输出之后,我用cURL再次调用urlnext
内部的URL,并得到类似的输出,以此类推,如果我继续得到urlnext
作为响应,我们用cURL库调用新的URL。
但该循环调用的是第一个响应urlnext
,而不是下一个响应。它给出了第一个urlnext
的响应,但不进入下一个循环。请告诉我如何修改这个循环。这是我的代码:
$dat1 = httpGet($url);
$xml2 = new SimpleXMLElement($dat1);
foreach ($xml2 as $array) {
$url = $array->urlnext;
$data = httpGet($url);
$xml2 = new SimpleXMLElement($data);
foreach ($xml2 as $array) {
doing the operations.....
}
}
httpGet
函数执行cURL请求并按预期返回XML。
<?php
function getData($url){
// $dat1=httpGet($url);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
// curl_setopt($ch,CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'header1: value1',
'header1:value2'
));
$output=curl_exec($ch);
curl_close($ch);
//return $output;
return new SimpleXMLElement($output);
}
//Create main array that will contain the XML responses of all the urls.
$mainData = Array();
//Pass in URL, calls getData function, finds next url, then calls its self with the new URL. Be forewarned--- this could create an infinite loop
function loopData($url){
$data = getData($url);
array_push($mainData, $data);
foreach($data as $array){
$nexturl=$array->urlnext;
loopData($nexturl);
}
}
//Call initial URL
$url = "http://exampleurl.com";
loopData($url);
//Print all data results.
print_r($mainData);
?>
我马上想到的一件事是第6行"data"变量之前缺少"$"。但共享的变量名称也令人担忧。
我无法在不知道您调用的API的情况下对此进行测试,但这是我最初尝试创建一段代码来实现您所描述的功能:
//Pass in URL to call, returns the XML element
function getData($url){
$dat1=httpGet($url);
return new SimpleXMLElement($dat1);
}
//Create main array that will contain the XML responses of all the urls.
$mainData = Array();
//Pass in URL, calls getData function, finds next url, then calls its self with the new URL. Be forewarned--- this could create an infinite loop
function loopData($url){
$data = getData($url);
array_push($mainData, $data);
foreach($data as $array){
$nexturl=$array->urlnext;
loopData($nexturl);
}
}
//Call initial URL
$url = "http://www.exampleurl.com";
loopData($url);
//Print all data results.
print_r($mainData);