цикл foreach в php получает неверный аргумент - PullRequest
0 голосов
/ 26 июня 2011

Я получаю «Неправильный аргумент» при использовании следующего кода. Я могу успешно разобрать IP-адрес и номер порта, но я не знаю, как получить более одного за раз. Мой цикл foreach не работает. Есть идеи?

$dom = new DOMDocument();
$dom->loadHTMLFile($url);
$xml = simplexml_import_dom($dom);
$dom_results = $xml->xpath("/html/body/div[@id='subpagebgtabs']/div[@id='container']/table[@id='listtable']");

$ip_address = $dom_results[0]->tr->td[1]->span;
$ip_post = $dom_results[0]->tr->td[2];

$address_parts = $ip_address.":".$ip_post;

foreach ($address_parts as $address_full){
    echo $address_full . "<br>";
}

Вывод $ Dom_Results

["tr"]=>
    array(50) {
      [0]=>
      object(SimpleXMLElement)#5 (3) {
        ["@attributes"]=>
        array(2) {
          ["class"]=>
          string(0) ""
          ["rel"]=>
          string(7) "9054676"
        }
        ["comment"]=>
        object(SimpleXMLElement)#56 (0) {
        }
        ["td"]=>
        array(8) {
          [0]=>
          object(SimpleXMLElement)#57 (2) {
            ["@attributes"]=>
            array(2) {
              ["class"]=>
              string(20) "leftborder timestamp"
              ["rel"]=>
              string(10) "1309047901"
            }
            ["span"]=>
            string(10) "2 minutes"
          }
          [1]=>
          object(SimpleXMLElement)#58 (1) {
            ["span"]=>
            string(13) "122.72.10.201"
          }
          [2]=>
          string(3) "80"

Ответы [ 2 ]

0 голосов
/ 26 июня 2011

кажется, что вы хотите извлечь все IP-адреса и номера портов и объединить их как

ipaddress: порт

Так что попробуйте это

foreach($dom_results as $dom) {
  $ip = $dom->tr->td[1]->span;
  $port = $dom->tr->td[2];
  $address = $ip . ":". $port;
  echo $address . "<br />";
}
0 голосов
/ 26 июня 2011

Я думаю, это то, что вы ищете:

// If results are found
if ( ! empty($dom_results) )
  // Loop through each result. Based on your XPath query, the $dom_results
  // contains tables. This loops through the rows of the first table.
  foreach ( $dom_results[0]->tr as $row )
  {
    $ip_address = $row->td[1]->span;
    $ip_post = $row->td[2];

    // Output the address
    echo $ip_address . ":" . $ip_post . "<br />";
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...