[英]PHP - How to merge foreach arrays into one loop
这是我的代码:
$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>";
}
IteratorIterator类 :
此迭代器包装器允许将可遍历的任何内容转换为迭代器。 重要的是要了解,大多数不实现迭代器的类都有其原因,因为它们很可能不允许完整的迭代器功能集。 如果是这样,则应提供防止误用的技术,否则会出现异常或致命错误。
在循环内使用$ 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++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.