foreach循环没有给出所需的结果


foreach loop not giving required result

我正在使用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);