2010-09-16 1 views
2

J'essaie de rechercher et de vérifier les détails en double qui sont disponibles dans la base de données en utilisant php.L'utilisateur entre plusieurs noms, puis un numéro de téléphone pour vérifier les doublons. Voici ma fonction. J'ai juste coupé quelques parties parce que c'était trop long.Arrêter le traitement et évaluer la valeur suivante dans la boucle 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(); 

     } 
} 
    } 


?> 

La fonction fonctionne parfaitement, mais le seul problème que j'ai est bien une correspondance est trouvée, il va jusqu'à la dernière page qui est donnée dans la boucle, puis passe par le nom suivant. Je voudrais savoir est-il possible de faire quand une correspondance est trouvée arrêter le traitement, puis rechercher le nom suivant?

Je ne veux pas utiliser exit(); car il arrête complètement l'exécution

Le format d'entrée est comme ci-dessous
noms des entrées utilisateur: john, Sam, Michael, Steve
Numéro de téléphone: 0084554741

Toute aide sera appréciée

Répondre

11

Vous sont probablement à la recherche break

l'exécution du courant pour for, foreach, while, do-while ou switch structur e.

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

et/ou continue

continue est utilisée dans des structures en boucle à ignorer le reste de l'itération de la boucle de courant et poursuivre l'exécution à l'évaluation de l'état et le début de l'itération suivante.

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

Peut-être que vous voulez ajouter que vous pouvez dire continuer combien de boucles pour échapper à. –

+0

@Kristoffer Je laisse cela pour l'OP pour savoir sur les pages de manuel respectifs :) – Gordon

2

@Gordon a offert la réponse formellement correcte, une réponse "meilleures pratiques" serait de diviser votre fonction en logique parties (en particulier comme vous le mentionnez c'est trop long), par exemple:

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

La fonction de recherche contient la boucle en question et utilise « retour » pour sortir de la boucle (et la fonction) quand il trouve quelque chose:

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

+1 pour le refactoring – Gordon

Questions connexes