foreach循环在第一次迭代后停止


foreach loop stops after first iteration

尝试从xml文件中提取一个id,将其传递到api查询中,并将结果加载到dom文档中。问题是我的foreach循环只返回第一次迭代,然后似乎停止了。

为什么它不回去取下一个PROGRAM_ID

//load results of first api call into simplexml - print_r here gives me a big array with all the expected rows in it
$progsitecontent = simplexml_load_file($progsiteapi);
//set which nodes to step through to reach required information
$totalprogsitecontent = $progsitecontent->matrix->rows->row;
//for each instance of a program id in this simplexml file:
foreach($totalprogsitecontent->PROGRAM_ID as $progid)
{
    //...substitute the program id into the api call
    $programdetails = $progdetailsapi_start.$progid.$progdetailsapi_end;
    $complete_program_details = simplexml_load_file($programdetails);
    //now for each instance of a programs info, load into a DOM document and carry out the below actions - from here down already works in another script so im sure the problem has to be above this point 
    $prog_info = $complete_program_details->matrix->rows->row;
    //create the top line container tag
    $row = $doc->createElement ("programInformation");
    //create the container tag
    $progID = $doc->createElement("programId");
    //fill it with the information you want
    $progID->appendChild ( $doc->createTextNode ( $prog_info->PROGRAM_ID ) );
    //attach this information to the row
    $row->appendChild($progID);
    //repeat for each element you want to include
    $progName = $doc->createElement("programName");
    $progName->appendChild ( $doc->createTextNode ( $prog_info->PROGRAM_NAME ) );
    $row->appendChild($progName);
    $progURLs = $doc->createElement("programUrls");
    $progURLs->appendChild ( $doc->createTextNode ( $prog_info->PROGRAM_URLS ) );
    $row->appendChild($progURLs);
    $progLogo = $doc->createElement("programLogo");
    $progLogo->appendChild ( $doc->createTextNode ( $prog_info->MERCHANT_LOGO ) );
    $row->appendChild($progLogo);
    $r->appendChild ($row);
}
echo $doc->saveXML();

请随意评论这些文章是如何写的。我仍然处于"bodge it and see"的阶段:)

如果没有看到$totalprogsitecontent的完整结果,就不能说太多,但我认为它应该是这样的:

foreach($totalprogsitecontent as $progid)
{
...
}

由于$totalprogsitecontent->PROGRAM_ID已经是一个单独的值,所以您要迭代这个元素而不是数组。

此外,您的$progid在for循环中是小写的,但您引用了$progID——PHP区分大小写。


在查看了您的XML代码之后,下面是它应该是什么样子。

foreach($progsitecontent->matrix->rows->row as $row){
     $progid = $row['PROGRAM_ID'];
     $affid = $row['AFFILIATE_ID'];
}