Fonction modification chaine de caractère php

ccpu Messages postés 5 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 7 janvier 2011 - 7 janv. 2011 à 15:16
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 7 janv. 2011 à 20:32
Bonjour,

Je souhaiterais savoir si avec la fonction str_replace ou autre fonction, on peut remplacer une chaine de caractère mais deux fois. Je vous montre un exemple :
Chaine : "toto tata"
Je voudrais remplacer toto par un truc et tata par un autre truc en appelant une seule fois la fonction. Si besoin est je vous explique le contexte qui me force à ne l'utiliser qu'une seule fois. J'ai déjà essayé de faire une fonction qui fait deux fois str_replace mais ce fut un echec

Par avance, merci.

8 réponses

cs_ludwig59 Messages postés 128 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 6 mai 2011 2
7 janv. 2011 à 15:49
Bonjour

Vous pouvez le faire avec str_replace en utilisant des tableaux comme paramètres.

Regardez ce lien : str_replace
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
7 janv. 2011 à 16:03
bonjour
une propos
a++

<?php
function str_replace_all($search,$replace,$subject) {
  while(strpos($subject,$search)!==false) {
    $subject = str_replace($search,$replace,$subject);
  }
  return $subject;
}
  
function remplace($chaine,$arg1,$arg2,$motif){
$a=str_replace_all($arg1,$motif,$chaine);
$a=str_replace_all($arg2,$motif,$a);
return $a;
}

echo str_replace_all("titi","????","toto tata tata titi tutu toitoi tototutu").'
';
echo remplace("toto tata tata titi tutu toitoi tototutu","toto","titi","????");
?>
0
ccpu Messages postés 5 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 7 janvier 2011
7 janv. 2011 à 16:09
Merci à tous, mais en fait j'ai trouvé beaucoup plus simple, en réveillant...

str_replace("toto","truc1",str_replace("tata","truc2",$machaine));
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
7 janv. 2011 à 16:11
ou avec deux motifs ...

<?php
function str_replace_all($search,$replace,$subject) {
  while(strpos($subject,$search)!==false) {
    $subject = str_replace($search,$replace,$subject);
  }
  return $subject;
}
  
function remplace($chaine,$arg1,$arg2,$motif1,$motif2){
$a=str_replace_all($arg1,$motif1,$chaine);
$a=str_replace_all($arg2,$motif2,$a);
return $a;
}

echo str_replace_all("titi","????","toto tata tata titi tutu toitoi tototutu").'
';
echo remplace("toto tata tata titi tutu toitoi tototutu","toto","titi","????","xxx");
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
7 janv. 2011 à 16:12
moi aussi
$a=str_replace_all($arg1,$motif1,$chaine);
a++
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
7 janv. 2011 à 16:19
Salut,

Visiblement vous avez loupé la réponse de ludwig59 qui donne une solution carŕement plus élégante au problème. À ce sujet, je compléterais sa réponse en indiquant une fonction très voisine qui fais la même chose mais de manière légèrement différente : strtr().
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
7 janv. 2011 à 16:34
Ho j'oubliais :

@cod57 : Ta fonction str_replace_all() ne sert strictement à rien, str_replace() remplace déjà toutes les occurrences de la chaîne à remplacer. Bref, ton while ne sert à rien car ne tourne que une seule fois au maximum. Après, comme je disais au dessus, ludwig59 à fait remarquer que l'utilisation de tableaux permet d'obtenir l'effet demandé, rendant ta fonction remplace() d'autant plus inutile qu'elle s'applique à un cas très particulier et ne risque donc pas de servir un jour.

Et si jamais vous avez du mal à comprendre, voici un exemple double :
<?php

$str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.';

$res = str_replace(array('et', 'it'), array('ET', 'IT'), $str);
var_dump($res);

$res strtr($str, array('or'> 'OR', 'ct' => 'CT'));
var_dump($res);

?>

-> php toto.php
string(57) "Lorem ipsum dolor sIT amET, consectETur adipisicing elIT."
string(57) "LORem ipsum dolOR sit amet, conseCTetur adipisicing elit."
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
7 janv. 2011 à 20:32
@TychoBrahe
merci pour ces precisions constructives.
a++
0
Rejoignez-nous