Remplacer n-éme caractère dans une chaine

aisha -  
 aisha -
Bonjour,
SVP je cherche une fonction php qui fait remplace n-éme caractére dansune chaine par une autre
Exemple:
$chaine='KOI;jgh5;bsb';
j'amerai remplacer la 3éme ; par un autre caractére Aide svp :)
Merdi d'avance :)

1 réponse

  1. Tomy2e Messages postés 1041 Statut Membre 864
     
    Bonjour, s'il s'agit d'un simple changement pour un seul caractère ce code suffira
    <?php
    $chaine='KOI;jgh5;bsb'; 
    $chaine[2] = "L";
    echo $chaine;
    ?>

    Sinon pour une plus grande flexibilité la fonction substr_replace ( https://www.php.net/manual/fr/function.substr-replace.php ) est plus adaptée
    0
    1. aisha
       
      Merci de m'avoir répondu, ça va étre quoi le resultat dans votre exemple??
      0
    2. Tomy2e Messages postés 1041 Statut Membre 864
       
      le 3ème caractère, la lettre "I", sera remplacé par un "L"
      0
    3. aisha
       
      ok en fait je sais pas la position exception du caractére je veux remplacer dans l'exemple au dessus la 6éme ; par un autre caractére.
      0
    4. Tomy2e Messages postés 1041 Statut Membre 864
       
      Ah d'accord, j'avais mal compris, il aurait fallu mettre des guillemets sur le point virgule, dans ce cas j'ai trouvé une fonction sur internet qui permet de faire ce qui est demandé
      <?php
      function str_replace_nth($search, $replace, $subject, $nth)
      {
          $found = preg_match_all('/'.preg_quote($search).'/', $subject, $matches, PREG_OFFSET_CAPTURE);
          if (false !== $found && $found > $nth) {
              return substr_replace($subject, $replace, $matches[0][$nth][1], strlen($search));
          }
          return $subject;
      }
      $subject='KOI;jgh5;bsb'; 
      
      echo str_replace_nth(';', ',', $subject, 1);
      ?>

      Dans cet exemple on remplace le 2ème ";" par un ",".
      Pour modifier le 6ème ";" il faut remplacer le 1 par un 5 dans la fonction str_replace_nth()
      0
    5. aisha
       
      Merci enormement de votre aide, je sais la tester tt de suite.
      0