【问题标题】:Using a While loop to loop through DOMNodes使用 While 循环遍历 DOMNodes
【发布时间】:2011-12-08 04:16:12
【问题描述】:

我有以下代码,假设它循环一组 nodeValues 并在节点以特定字母开头时停止。我对循环很陌生,但认为下面的代码会起作用..我做错了什么?

$file = $DOCUMENT_ROOT. "http://website.com";
$doc = new DOMDocument();
@$doc->loadHTMLFile($file);


$elements = $doc->getElementsByTagName('td');

$i=0;
 while (trim(substr($elements->item($i)->nodeValue, 0, 3)) !== "MON" | "TUE"){

        echo $elements->item($i)->nodeValue;
        $i=$i+1;

        };

【问题讨论】:

  • !=== 中的= 太多了。应该是!==
  • 另外,"Mon" | "TUE" 之间有一个按位或 |。也许您打算将当前的nodeValue"Mon""TUE" 进行比较?
  • 我希望它说“在 nodeValue 不等于 MON 或 TUE 时循环此操作”
  • 我明白了。请参阅下面的答案。

标签: php html dom


【解决方案1】:

您的while 条件中有一些重要的逻辑和运算符问题。 | 是按位 OR 比较,看起来您的意思是使用逻辑与 &&,因为只要节点值不等于 MON 或 TUE,您的循环就需要继续:

我建议将 nodeValue 存储在 while 循环之外并比较变量的可读性:

$i = 0;
// Store the first node value ahead of the loop
$currentNode = trim(substr($elements->item($i)->nodeValue, 0, 3));
// Test it's neither MON nor TUE
// That is, "not equal to 'MON' *AND* not equal to 'TUE'"
while ($currentNode !== "MON" && $currentNode !== "TUE") {
    echo $elements->item($i)->nodeValue;
    $i=$i+1;
    // Then reassign $currentNode after $i increments
    $currentNode = trim(substr($elements->item($i)->nodeValue, 0, 3));    
}

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2017-03-05
    • 2011-08-23
    相关资源
    最近更新 更多