繁体   English   中英

PHP-如何将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>";
}

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM