2014-03-31 69 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