2013-04-20 43 views
-1

當在字符串中找到「最佳匹配」時,下面的腳本應該結束,但即使我知道它最終被發現腳本仍在運行。請幫我解決我的錯誤。請幫我修復這個PHP,而聲明

$end = "1"; 
while ($end != 2) { 
foreach($anchors as $a) { 
    $i = $i + 1; 
    $text = $a->nodeValue; 
    $href = $a->getAttribute('href'); 


     //if ($i<80) { 
    //if (strpos($item, ".$array.") == false) { 


    //} 
     if (strpos($text, "best match") == true) { 
$end = "2"; 
} 
    if (strpos($text, "by owner") === false) { 
     if (strpos($text, "map") === false) { 
    if ($i > 17) { 

    echo "<a href =' ".$href." '>".$text."</a><br/>"; 

} 
    } 

    } 

    } 
     //$str = file_get_contents($href); 
//$result = (substr_count(strip_tags($str),"ipod")); 
//echo ($result); 



} 
+0

解決您的縮進,你會看到這個問題。 – 2013-04-20 03:01:20

+0

爲什麼'$ end'是一個既可以是「1」又可以是「2」的字符串,並與整數進行比較?爲什麼不把它做成一個布爾值?爲什麼不使用'break 2'?如果'strpos'的結果是'0',它不會與'true'相比(反正毫無意義的比較)。 – Ryan 2013-04-20 03:01:50

回答

0

在你strpos,你與真正比較,這是不對的。
此外,在臨如果聲明你應該打破foreach和while循環。

這是正確的代碼:

<?php 

while ($end != 2) { 

    foreach($anchors as $a) { 
    $text = $a->nodeValue; 
    $href = $a->getAttribute('href'); 

    if (strpos($text, "best match") !== false) { 
     $end = "2"; 
     break 2; 
    } 

    if (strpos($text, "by owner") === false) { 
     if (strpos($text, "map") === false) { 
     if ($i > 17) { 
      echo "<a href =' ".$href." '>".$text."</a><br/>"; 
     } 
     } 
    } 
    } 
} 
0

問題是嵌套循環。當您找到「最佳匹配」時,您還需要結束foreach循環。嘗試:

if (strpos($text, "best match") == true) { 
    $end = 2; 
    break; # Terminate execution of foreach loop 
} 
+0

不,這不起作用): – user1973004 2013-04-20 03:21:50

+0

@ scoota269。我認爲它應該是'break 2';'從foreach'和'while'退出 – Amir 2013-04-20 04:00:38