Verifier si une chaine contient caractere php

Bonjour,
J'ai fait un script qui affiche les interventions du membre sur un forum mais si j'ai une chaine 1,5,3,1,2,7 qui signifie les intervention des membre par leur id,comment pourrais je voir si cette chaine contient l'id 1 par exemple(en php).
comment faire?
merci

5 réponses

  1. Avec des expressions régulières :
    <?php 
    $str = "3,1,2,4,3,5,7,9,8,1,54,5,30,23,33,3"; 
    $num = "3"; 
    $pattern = "#(?:^(".$num.")[^0-9])|(?:[^0-9](".$num.")[^0-9])|(?:[^0-9](".$num.")$)#"; // cas milieu, debut et fin de chaine 
    if(preg_match_all($pattern,$str,$matches)) 
    { 
          echo "la chaine $num a été trouvée ".sizeof($matches[1])." fois\n"; 
    } 
    ?>
    3
    1. Salut !

      @ monkaarnaud :
      je ne vois pas ce qu'il y a de plus à dire. J'ai parfaitement compris.

      fofo73 :
      Si tu es sûr que ta chaine contient des ID qui sont séparés par une virgule (dans le cas contraire dis-le moi), alors voici un code qui au final renvoi un booléen (true / false).

      $id vaut l'ID à rechercher, $chaine est la chaine qui contient les ID, $trouve vaudra true ou false pour la condition "ID trouvé ou pas".

      Voila ;)

      Code :
      <?php 
      $id = 1; 
      $chaine = "1,5,3,1,2,7"; 
      
      // Initialisation 
      $trouve = false; 
      $tableau_chaine = explode(",", $chaine); 
      foreach($tableau_chaine as $id_actuel){ 
      if($id_actuel == $id){ 
      $trouve = true; 
      } 
      } 
      
      // Au final 
      if($trouve){ 
      echo "L'ID ".$id." a été trouvé !"; 
      } 
      else{ 
      echo "L'ID ".$id." n'a pas été trouvé..."; 
      } 
      ?>
      2
      1. ok merci mais je n'arrive pas du coup a extraire les résultat où topic_intervenu est egalea l'id du membre.je ne vois pas comment faire,peut tu m'aider?
        0
    2. Bonsoir

      Je ne comprends pas trop ta question.
      Mais en php; pour vérifier le contenu d'une variable ou d'une chaine, tu as soit echo (pour afficher son contenu) ou par égalité pour comparer son contenu avec 1 par exemple; du genre
      if (nom_de_la_chaine == 1) {
      on effectue tel traitement
      }
      else {
      on effectue un autre trainement
      }

      Mais entre temps si c'est pas la solution à ton problème; je te prie d'être plus explicite.
      0
      1. Contributeur
        Salut,

        en ce qui concerne les chaînes de caractères, php dispose d'un nombre conséquent de fonctions déjà toutes faites qui résolvent de nombreux problèmes. Inutile de réinventer la roue.

        Pour exemple ce bout de code que j'ai à peine adapté (traduit) et que l'on trouve dans la documentation en ligne:

        CODE 1
        <?php   
        $chaine   = "1,5, 13, 20, 53,1,33,  43, 5,55,43, 13 ,30,7";   
        $valeur    = '3';                     
         
         //supprimer les espaces si jamais  
        $fmt_chaine = str_replace(' ','', $chaine);  
        
        // Si valeur en début de chaîne
        $pos_start  = (stripos($fmt_chaine, $valeur.',') == 0); 
        
        // Si valeur en milieu de chaine  
        $pos_mid  = (stripos($fmt_chaine, ','.$valeur.',') !== false); 
        
        // Si valeur en fin de chaîne
        $pos_end   = (stripos($fmt_chaine, ','.$valeur) == strlen($fmt_chaine)); 
        
        if ($pos_start || $pos_mid || $pos_end) {  
         echo "L'ID ($valeur) a été trouvé dans ($chaine)"; 
        } else {  
            echo "Désolé,  aucune occurrence de ($valeur) dans ($chaine)";   
        } 
        ?>  
        


        CODE 2 : OBSOLETE concerné par le commentaire suivant
        <?php     
        $chaine   = "1,5,3,1,2,7";  // Chaîne où s'effectue la recherche     
        $valeur    = '3';                  // Valeur à rechercher dans la chaîne     
              
        $pos      = stripos($chaine, $valeur);     
              
        if ($pos === false) { // Vérifie que $pos est de type booléen et vaut 'false'     
            echo "Désolé,  ($valeur) ne se trouve pas dans ($chaine)";     
        } else {     
            echo "Une valeur de ($valeur) a été trouvée dans ($chaine) comme caractère numéro ($pos)";     
        }     
        ?>     
        


        Tu pourras jeter un coup d'oeil avec intérêt dans la documentation.
        https://www.php.net/manual/fr/ref.strings.php

        Bon courage.

        P.S.:
        Le code obsolète a été modifié suite à une remarque pertinente malgré son ton sarcastique plutôt mal venu.

        "La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
        Albert Einstein
        0
        1. Bonjour,
          Il me semble que si la chaine contient 33, le code 1 dira que 3 est trouvé.
          Mais je me trompe peut-être.
          0
        2. Contributeur
          Tu ne t'étais pas trompé.

          J'ai fait une rapide modif. Si tu vois d'autres bugs dessus, merci de les signaler.

          Ceci dit, à première vue la solution de Leviathan49 me semble répondre au besoin énoncé.
          De plus elle permet de connaître le nombre d'interventions pour l'ID, ce qui - bien que pas demandé ici - pourra être utile par la suite.
          0
      2. Mais oui, mais oui... Continue comme ca et je te donne preg_match() et cela fonctionne.
        C'est bien gentil d'aider, mais cela ne résout pas son problème !

        Les ID, c'est précis. Avec l'exemple 3, ca fonctionne.
        Mais si la chaine contient un ID '30', et que je cherche 3, cela m'affiche qu'il est trouvé !

        Si c'était le but j'aurais donné un bête preg_match() dès le début.
        Tu comprends ?
        Bye ;)
        -1
        1. Contributeur
          Mais oui, mais oui... Continue comme ca et je te donne preg_match() et cela fonctionne.
          Alors qu'attends-tu ?

          C'est bien gentil d'aider, mais cela ne résout pas son problème !
          ça il me semble que c'est encore à fofo73 de le dire.

          Les ID, c'est précis. Avec l'exemple 3, ca fonctionne.
          Mais si la chaine contient un ID '30', et que je cherche 3, cela m'affiche qu'il est trouvé !

          Ah ben voici une remarque pertinente !
          Je m'étais déjà aperçu du problème au moment du post et de l'ai édité. Néanmoins j'ai gardé mon code original afin que ton commentaire aie encore un sens.


          A bon entendeur.
          0
        2. C'était juste que j'aime pas les gens qui postent des codes qui fonctionnent pas. Bon, ici, tu le savais un peu, donc je retir ce que j'ai dit...
          0