停止处理并评估foreach循环中的下一个值

时间:2010-09-16 08:03:36

标签: php xml

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

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

        }
}
    }


?>

这个函数运行得很完美,但我遇到的唯一问题是虽然找到匹配,但它会一直运行到for循环中给出的最后一页,然后通过下一个名称。我想知道是否可以在找到匹配时停止处理,然后搜索下一个名称?

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

输入格式如下 用户输入姓名:john,Sam,Michael,Steve
电话号码:0084554741

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:11)

您可能正在寻找break

  

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

  

continue在循环结构中用于跳过当前循环迭代的其余部分,并在条件评估和下一次迭代开始时继续执行。

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

答案 1 :(得分:2)

@Gordon提供了正式的正确答案,“最佳实践”的答案是将您的功能分成逻辑部分(特别是当您提到它太长时),例如:

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

搜索函数包含有问题的循环,并在找到某些内容时使用“return”退出循环(和函数):

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

答案 2 :(得分:0)