2014-03-31 70 views
1

我有一个小问题:遍历数组值

我需要的,因为有一个数组中值重复这个

do { 
    $QUERY = "/member?id=".$counter."&action=refresh"; 
    $URL = $HTTP.$HTTPUSER.":".$HTTPPASS."@".$HTTPSERVER.":".$HTTPPORT.$QUERY; 
    $xml = file_get_contents($URL); 

    $data = new SimpleXMLElement($xml); 

    $test_ip = (string)$data->c1; 

    $dnsip = explode('<br>', $test_ip); 

    $ext_ip = strip_tags($dnsip[1]); 

    if ($ext_ip != "127.0.0.1" && $ext_ip != "localhost") { 

     $dns = strip_tags($dnsip[0]); 

     echo "$dns $ext_ip <br>"; 
    } 

    $counter +=1; 

} while (!empty($data)); 

很多次,所以我尝试添加该

$ports = array('2001','2002','2003'); 

foreach ($ports as $HTTPPORT) { 

echo "$HTTPPORT<br>"; 

$counter = 1; 

do { 
    $QUERY = "/member?id=".$counter."&action=refresh"; 
    $URL = $HTTP.$HTTPUSER.":".$HTTPPASS."@".$HTTPSERVER.":".$HTTPPORT.$QUERY; 
    $xml = file_get_contents($URL); 

    $data = new SimpleXMLElement($xml); 

    $test_ip = (string)$data->c1; 

    $dnsip = explode('<br>', $test_ip); 

    $ext_ip = strip_tags($dnsip[1]); 

    if ($ext_ip != "127.0.0.1" && $ext_ip != "localhost") { 

     $dns = strip_tags($dnsip[0]); 

     echo "$dns $ext_ip <br>"; 
    } 

    $counter +=1; 

} while (!empty($data)); } 

问题是它只执行第一个端口号(2001)的脚本,我无法发现原因。

任何想法?

+0

也许你会被卡住:

这里测试的代码。 $数据是空的吗? – Needpoule

+0

是的,在它完成端口2001的while循环之后,它会正常退出,但不会继续执行与其他2个端口相同的操作...真的不知道发生了什么,我找不到任何错误 – skymario84

+0

什么语言是这样的,PHP?请添加适当的语言标签。 –

回答

1

您可能会在'do .. while'循环中出现异常,这会引起麻烦。

我添加了一个'try.. catch'块和一些'echo'语句,以确保它总是循环所有'端口'现在。更改'catch'将$ data标记为空,然后继续。在do while循环

<?php 

$ports = array('2001','2002','2003'); 

$counter = 0; // total count of documents 

foreach($ports as $HTTPPORT) { 

    echo $HTTPPORT, ' start of process port loop<br/>'; 

    try { // catch any error -- report it and loop round again 
     do { 
      $QUERY = "/member?id=".$counter."&action=refresh"; 
      $URL = ''; // $HTTP.$HTTPUSER.":".$HTTPPASS."@".$HTTPSERVER.":".$HTTPPORT.$QUERY; 
      try { 
       $xml = file_get_contents($URL); 
       $data = new SimpleXMLElement($xml); 
      } 
      catch (Exception $e) { // ignore any errors 
       echo 'SimpleXMLElement : oops :', $e->getMessage(), '<br />'; 
       $data = ''; // mark as empty 
      } 

      if (!empty($data)) { // process data 
       $test_ip = (string)$data->c1; 
       $dnsip = explode('<br>', $test_ip); 

       $ext_ip = strip_tags($dnsip[1]); 

       if ($ext_ip != "127.0.0.1" && $ext_ip != "localhost") { 

        $dns = strip_tags($dnsip[0]); 

        echo "$dns $ext_ip <br>"; 
       } 
      } 

      $counter +=1; 

     } while (!empty($data)); 

    } // end of try to get and process a document... 
    catch (Exception $e) { // catch all errors for now 
     echo 'Processing List of Ports: oops! :', $e->getMessage(), '<br />'; 
    } 
} // end of foreach port 
+0

这是有效的,当while循环到达一个循环的结尾时,它会报告一个错误,而不是打破循环并继续使用另一个端口...有没有更好的方法来循环通过id直到它没有得到内容页面? – skymario84