如何将foreach数组合并到一个循环中


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>";
}
<<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++;
}