下面是我的代码:
$url = "https://www.leaseweb.com/dedicated-servers/single-processor";
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xpath = new DOMXpath($doc);
$n = $xpath->query('//td[@data-column-name="Model"]');
$r = $xpath->query('//td[@data-column-name="RAM"]');
foreach ($n as $entry) {
$Name = $entry->nodeValue;
$RAM = $r->nodeValue;
echo " $Name - RAM: $RAM<br>";
}
我成功地回显$Name
,但我不能得到$RAM
的值,因为我没有它在我的数组。我的问题是如何将$r
添加到这个foreach循环中并使其工作?
提前感谢!
PHP文档在这一点上有点模棱两可。DOMXPath::query
返回一个DOMNodeList
,它不是真正的Iterator
,也没有实现ArrayAccess
,而是实现了Traversable
,它没有一个有助于遍历对象的特定签名。
我想起来了:
$item = 0;
foreach ($n as $entry) {
$Name = $entry->nodeValue;
$RAM = $r->item($item)->nodeValue;
echo " $Name - RAM: $RAM<br>";
$item++;
}
其他可能有效的内容:
$iterator = new IteratorIterator($r);
$iterator->rewind();
foreach ($n as $entry) {
$Name = $entry->nodeValue;
$node = $iterator->current();
$RAM = $node->nodeValue;
$iterator->next();
echo " $Name - RAM: $RAM<br>";
}
<<p> IteratorIterator类/strong>: 这个迭代器包装器允许将任何可遍历的对象转换为迭代器。理解大多数没有实现Iterator的类是有原因的,因为它们很可能不允许完整的Iterator特性集,这一点很重要。如果是这样,应该提供技术来防止误用,否则会出现异常或致命错误。
在循环中使用$key变量
foreach ($n as $key => $entry) {
$Name = $entry->nodeValue;
$RAM = $r[$key]->nodeValue;
echo " $Name - RAM: $RAM<br>";
}
你可以尝试使用当前和下一个数组函数(php doc)
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xpath = new DOMXpath($doc);
$n = $xpath->query('//td[@data-column-name="Model"]');
$r = $xpath->query('//td[@data-column-name="RAM"]');
//Reset pointer to first element and assign to currR
$currR = reset($r);
foreach ($n as $entry) {
$Name = $entry->nodeValue;
$RAM = $currR->nodeValue;
echo " $Name - RAM: $RAM<br>";
//Move pointer to next element and assign this to currR
$currR = next($r);
}
$i=0;
foreach ($n as $entry) {
$Name = $entry->nodeValue;
$RAM = $r[$i]->nodeValue;
echo " $Name - RAM: $RAM<br>";
$i++;
}