2012-06-13 3 views
2

J'essaie de rechercher plusieurs chaînes dans une chaîne plus grande et si aucune ne correspond, manipulez la chaîne d'origine. Voici le code:PHP Boucle pour rechercher une chaîne, exécuter si aucune correspondance

$searchthis = 'this is a string' 
$arr = array('foo', 'bar'); 
foreach ($arr as &$value) { 
    if (strpos($searchthis, $value) !== false) { 
    break; 
    } 
    else{ 
    $searchthis = $searchthis . ' addthis'; 
    } 
} 

Le problème est après la recherche de la première variable de chaîne et qui ne correspond pas, la chaîne recherchée d'origine est manipulée avant d'exécuter le test suivant.

Des pensées? Merci d'avance

Répondre

6

Vous devez vérifier s'il n'y a pas de correspondance en dehors de votre boucle. Vous pouvez accomplir cela en définissant une variable ($found) à true quand il y avait au moins une chaîne trouvée:

$found = false; 
foreach ($arr as &$value) { 
    if (strpos($searchthis, $value) !== false) { 
    $found = true; 
    } 
} 
if (!$found) { 
    $searchthis = $searchthis . ' addthis'; 
} 
+0

Merci une tonne @Tim Cooper. Cela a fait l'affaire. J'ai essayé en dehors de la boucle, mais il a été paramétré $ trouvé variable pour confirmer que je n'ai pas eu. À votre santé! – ckaufman

1

Vouliez-vous dire

$searchthis = 'this is a string' 
$arr = array('foo', 'bar'); 
$notfound = true; 
foreach ($arr as &$value) { 
    if (strpos($searchthis, $value) !== false) { 
    $notfound = false; 
    break; 
    } 
} 
if ($notfound){ 
    $searchthis = $searchthis . ' addthis'; 
} 
+0

Je ne vois pas le point d'ajouter "pause" au moins pas dans ce morceau particulier de code –

+0

Pas la meilleure pratique pour par défaut que pour vrai ... – JNF

+0

break est si si vous trouvez votre valeur dans le premier emplacement du tableau vous ne cherchez pas le reste. –

0

Ou comme ceci:

$searchthis = 'this is a string'; 
$arr = array('foo', 'bar'); 
foreach ($arr as &$value) { 
    if (strpos($searchthis, $value) !== false) { 
     break; 
    } 
    else{ 
     if(!isset($result)) { 
      $result = $searchthis . ' addthis'; 
     } 
     else { 
      continue; 
     } 
    } 
} 
+0

Semble avoir le même problème ... – JNF

+1

@Ruben vous avez probablement mal compris la question sinon c'est une erreur. Cela ajouterait/manipulerait la chaîne à la toute première boucle. donc si mon $ arr même si a l'élément de recherche (disons comme un deuxième élément dans le tableau) le résultat aurait déjà manipulé le résultat. –

Questions connexes