Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 停止处理并计算foreach循环中的下一个值_Php_Xml - Fatal编程技术网

Php 停止处理并计算foreach循环中的下一个值

Php 停止处理并计算foreach循环中的下一个值,php,xml,Php,Xml,我正在尝试使用php搜索和检查数据库中可用的重复详细信息。用户输入几个姓名,然后输入一个电话号码以检查重复信息。下面是我的功能。我只是剪掉了一些部分,因为它太长了 function gtc($names,$phone) { $pageNumb=20; $position = array(5); $sepname=explode(",","$names"); foreach ($sepname as $sepname1) { for ($page=0;$pag

我正在尝试使用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();

        }
}
    }


?>
功能gtc($names,$phone)
{
$pageNumb=20;
$position=数组(5);
$sepname=explode(“,”,“$names”);
foreach($sepname作为$sepname1)
{
对于($page=0;$pageloadHTML($result);
$xpath=newdomxpath($dom);
$elements=$xpath->evaluate(“//div[@id='inf']”);
foreach($elements作为$element)
{
$position[$sepname1]=$position[$sepname1]+1;
foreach($key=>$val)
$contct=$element->getElementsByTagName(“联系人”)->item(0)->nodeValue;
如果(预匹配(“/$phone/i”、$contct)){
echo“在数据库中找到>”;
}
}
ob_flush();
冲洗();
}
}
}
?>
该函数工作得很好,但我唯一的问题是,虽然找到了匹配项,但它会一直运行到for循环中给出的最后一页,然后遍历下一个名称。我想知道是否可以在找到匹配项时停止处理,然后搜索下一个名称

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

输入格式如下所示
用户输入名称:john、Sam、Michael、Steve
电话号码:0084554741


您可能需要的任何帮助都将不胜感激

中断结束当前for、foreach、while、do while或switch结构的执行

和/或

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

看看:


@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
    }

也许你想补充一点,你可以告诉continue有多少个循环需要转义。@Kristofer我把它留给OP在各自的手册页上找到:)
 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
    }