Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用while循环返回节点值_Php - Fatal编程技术网

Php 使用while循环返回节点值

Php 使用while循环返回节点值,php,Php,我使用xpath获取页面上的各种元素。如果我使用这样的foreach循环,foreach($company as$node){echo$node->nodeValue.“;}它可以工作,但我只能从一个变量返回值,这意味着我必须创建两个单独的foreach循环。我希望能够使用while循环,以便可以同时从变量返回两个值。while循环不返回任何错误或值 $doc = new DOMDocument(); @$doc->loadHTML($source); $xpath = new DOMXp

我使用xpath获取页面上的各种元素。如果我使用这样的foreach循环,
foreach($company as$node){echo$node->nodeValue.
“;}
它可以工作,但我只能从一个变量返回值,这意味着我必须创建两个单独的foreach循环。我希望能够使用while循环,以便可以同时从变量返回两个值。while循环不返回任何错误或值

$doc = new DOMDocument();
@$doc->loadHTML($source);
$xpath = new DOMXpath($doc);

$company = $xpath->query("//*[@class='name']");
$address = $xpath->query("//*[@class='address']");

$i = 0;

while ($i < count($company)) {
   echo $company->nodeValue. "<br>";
   echo $address->nodeValue. "<br><br>";
   $i++;
}
$doc=newDOMDocument();
@$doc->loadHTML($source);
$xpath=新的DOMXpath($doc);
$company=$xpath->query(“/*[@class='name']”);
$address=$xpath->query(“/*[@class='address']”);
$i=0;
而($inodeValue.“
”; echo$address->nodeValue。“

”; $i++; }
要通过索引检索单个节点,请使用

while($i<$company->length){
echo$company->item$i->nodeValue。“
”; echo$address->item($i)->nodeValue。“

”; $i++; }
是,但这仅在地址节点列表中的项目数量相等或更多时才起作用。否则,您将得到错误。@Gordon我假设它们与OP代码的长度总是相等的。这里只是修复了一个简单的错误,没有提供更高级别的建议。@Esailija可以工作,但是对于
count($company)
它只返回1,但应该有30个节点。有类似项目列表或节点列表的吗?所以我可以在上面使用count()。@Mr.1.0尝试
而($i<$company->length)
您可能使用了错误的XPath。请提供您的HTML示例。
while ($i < $company->length ) {
   echo $company->item($i)->nodeValue. "<br>";
   echo $address->item($i)->nodeValue. "<br><br>";
   $i++;
}