请帮我修复这个PHP while语句

时间:2013-04-20 02:57:09

标签: php debugging while-loop

下面的脚本应该在字符串中找到“最佳匹配”时结束,但即使我知道最终发现脚本仍在运行。请帮我修复我的错误。

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



}

2 个答案:

答案 0 :(得分:0)

问题是嵌套循环。当您找到“最佳匹配”时,您还需要结束foreach循环。尝试:

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

答案 1 :(得分:0)

strpos中,您与 true 进行比较,这是错误的。
此外,在thas if 语句中,您应该打破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/>";
        }
      }
    }
  }
}