Использование цикла While для обхода DOMNodes - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть следующий код, который предполагает перебирать набор значений узла и останавливаться на узле, если он начинается с определенных букв.Я очень плохо знаком с циклом, но думал, что следующий код будет работать .. что я делаю не так?

$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;

        };

1 Ответ

0 голосов
/ 08 декабря 2011

У вас есть некоторые существенные проблемы с логикой и оператором в вашем while состоянии. | - это побитовое сравнение ИЛИ, и похоже, что вы действительно хотите использовать логическое И &&, поскольку ваш цикл должен продолжаться, пока значение узла не равно 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));    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...