2011-12-07 6 views
0

nodeValuesのセットをループし、特定の文字で始まるノードで停止すると想定される次のコードがあります。私は非常にループしている新しいですが、次のコードが動作すると思った..私は間違って何ですか?Whileループを使用してDOMNodesをループする

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

     }; 
+0

あなたは '!==='に '='が多すぎます。 '!=='でなければなりません –

+0

また、 '' Mon ''と '' Mon ''の間にビット単位のOR '|'があります。 "TUE"。おそらく、現在の 'nodeValue'を' 'Mon ''や '' TUE' 'の両方と比較しようとしていますか? –

+0

nodeValueがMONまたはTUEに等しくない間にこのアクションをループするといいと思います。 – Shawn

答えて

0

while条件には、重要なロジックと演算子の問題があります。 |はビット単位のOR比較であり、ノード値がMONまたはTUEと等しくない限り、ループを続ける必要があるため、論理AND &&を使用するように見えます。

whileループの外側のnodeValueと可読性のために変数を比較する:

$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));  
} 
関連する問題