2010-09-16 89 views
2

我正在尝试使用php搜索并检查数据库中可用的重复详细信息。用户输入多个名称,然后输入电话号码以检查重复项。以下是我的功能。我只是裁剪了一些部分,因为它太长了。停止处理并评估foreach循环中的下一个值

function gtc($names,$phone) 
{ 

    $pageNumb=20; 
    $position = array(5); 

    $sepname=explode(",","$names"); 

foreach ($sepname as $sepname1) 
{ 
    for ($page=0;$page<=$pageNumb;$page=$page + 1) 
    { 
    $turl="http://192.168.111.2119/search.php?qry=$sepname1&page=$page"; 

    $search=curl_init(); 

    curl_setopt($search,CURLOPT_URL,$turl); 
    curl_setopt($search,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($search,CURLOPT_FAILONERROR,true); 
    curl_setopt($search,CURLOPT_AUTOREFERER,true); 
    $result=curl_exec($search); 

     $dom = new DOMDocument(); 
     @$dom->loadHTML($result); 

     $xpath=new DOMXPath($dom); 
     $elements = $xpath->evaluate("//div[@id='inf']"); 

     foreach ($elements as $element) 
     { 

      $position[$sepname1] = $position[$sepname1] + 1; 

      foreach($position as $key=>$val) 

      $contct = $element->getElementsByTagName("contact")->item(0)->nodeValue; 

      if (preg_match("/$phone/i",$contct)) { 
       echo "Found In Database>"; 

      } 

      } 

     ob_flush(); 
     flush(); 

     } 
} 
    } 


?> 

功能完美地工作,但是,我有唯一的问题是,尽管找到匹配它去,直到它在给定的循环,然后通过一个名字去最后一页。我想知道是否有可能在找到匹配时停止处理,然后搜索下一个名称?

我不想使用exit();因为它完全停止执行

输入格式如下
用户输入的名字:约翰,萨姆·迈克尔,史蒂夫
电话号码:0084554741

任何帮助将不胜感激

回答

11

你很可能寻找break

中断结束执行当前for,foreach,while,do-while或switch结构即

// output numbers 1,2,3,4 
foreach(range(1,10) as $number) { 
    if($number === 5) break; 
    echo $number, PHP_EOL; 
} 

和/或continue

继续被循环结构内使用跳过当前循环迭代的其余部分,并继续在条件评估执行,然后将下一次迭代的开始。

// output only even numbers 
foreach(range(1,10) as $number) { 
    if($number % 2) continue; 
    echo $number, PHP_EOL; 
} 
+1

也许你想补充一点,你可以告诉延续多少圈逃离。 – 2010-09-16 08:41:58

+0

@Kristoffer我让OP找到相应的手册页:) – Gordon 2010-09-16 08:52:39

2

@Gordon提供的正式的正确答案, “最佳做法” 的答案是你的功能拆分成逻辑部件(特别是您提到它太长),例如:

function search($term) { 
    $xml = loadXmlFromRemoteHost(); 
    if(!$xml) 
     echo "An error occured"; 
    $found = findTermInXml($xml, $term); 
    if($found) 
     echo "Found In Database>"; 

搜索功能包含有问题的回路,并使用“返回”退出循环(和功能)时,发现了一句:

function findTermInXml($xml, $term) { 
     foreach(...whatever...) { 
      if(...some condition...) 
       return true; 
     } 
     return false; // nothing found 
    } 
+0

+1重构 – Gordon 2010-09-16 09:20:25