Str_replace tableau

Signaler
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonsoir,

J'aimerai remplacer des caractère donnés dans un tableau à "key" comme on dit...:

function Conversion ($chaine) {



$conversion = array(

':)' => '*souris*',

':(' => '*triste*',

':|' => '*neutre*

);

foreach($conversion as $code => $valeur)

{

$chaine_finie .= str_replace($code,$valeur,$chaine);

}

echo $chaine_finie;

}



Voilà donc je pense que c'est assez clair.

Sachant que ce code me renvoie ceci, quand $chaine vaut ":):(:|" : *souris*:(:|:)*triste*:|:):(*neutre*.



Merci pour votre aide.

nashoy

18 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Hello,



Tu as fait ce que j'appelle une faute qui bouffe la vie car on la voit pas



Ce n'est pas str_replace($code,$valeur,$chaine) mais str_replace($code,$chaine,$valeur);



De plus, attention à ton array, il est mal fermé: ':|' => '*neutre* -> ':|' => '*neutre*'




*****
THINK -> SEEK -> ASK
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
hello,

bah évidemment, que veux tu que cela te renvoie...?

Vire ta fonction inutile, déjà.
Vire le foreach, et fais juste :
$aNeedle = array (':)', ':(', ':|');
$aTrans = array ('*souris*', '*triste*', '*neutre*');
$chaine = str_replace ($aNeedle, $aTrans, $chaine);
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Malik, tu es mal réveillé ;-)
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Hein quoi comment ou qui ça??!!!

euh, scouzi, mais en faisant:



$conversion array(':)'> '*souris*',':(' => '*triste*',':|' => '*neutre*');

$chaine = ":):(:|";

foreach($conversion as $code => $valeur)

{

$chaine2 .= str_replace($code,$chaine,$valeur);

$chaine2 .= '
';

}

echo $chaine2;



-> *souris*

*triste*

*neutre*



So, je pige pas la remarque (peut-être que je suis VRAIMENT mal réveillé !!! )

*****
THINK -> SEEK -> ASK
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Il veut, dans $chaine, trouver les clefs de son tableau présentes dans $chaine, et les remplacer par les valeurs de son tableau. Si j'ai bien pigé.

Donc
mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] )

mixed search, ce sont les clefs de son tableau
mixed replace, ce sont les valeurs de son tableau
mixed subject, c'est sa chaine.

Et pas besoin de foreach, str_replace prend des tableaux en paramètres. Sinon, là, il boucle trop et obtient forcément n'importe quoi.

Ou alors, c'est moi qui suis vraiment très mal réveillé ;-)
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
ouais, bon, je vais pas réfléchir plus, j'ai les yeux tout collés de toute façon là :)

Je rajouterais qu'effectivement la boucle est inutile. Voili voilà, bonne nuit

*****
THINK -> SEEK -> ASK
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006

Bonjour,

en fait je connais déjà la variante des 2 tableaux comme tu l'as dit
malalam, mais je préfèrerais le faire avec un tableau comme j'ai dit,
je trouve ça plus clair:

$conversion = array(

':)' => '*souris*',

':(' => '*triste*',

':|' => '*neutre*'

);

On peut facilement en rajouter en restant clair.



malik7934, ce que tu m'as donné affiche tout le contenu du tableau, or
j'aimerai seulement remplacer le code dans une chaine, par ex:

$chaine = "bonjour:)";

$chaine_fini vaut alors : "bonjour*souris*"


Si il le faut, j'adopterai la méthode des 2 tableaux, mais je préfèrerai de loin l'autre.



Merci beaucoup pour votre aide.
nashoy
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

$rechercher= array('machin','truc','bidule');
$remplacer=array('truc','bidule','chouette');

$chaine='truc machin bidule';

echo $chaine=str_replace($rechercher,$remplacer,$chaine);

ça va t'afficher bidule truc chouette

a +
<hr size ="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006

Salut Anthomicro,

dans mon message précédent, je disais que je cherche (si possible) une
autre méthode, car je trouve que celle des 2 tableaux n'est pas très
propre à mon gout (quand la liste devient plus longue).

Merci quand même.

nashoy
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
y'a pas d'autre méthode plus propre que ça pour remplacer de multiples valeurs, mais si tu veux alonger le temps d'exécution, tu peux par exemple mettre tout ce que tu recherches dans un fichier (un truc par ligne) et ce que tu veux remplacer et puis tu fais par exemple

$chaine=str_replace(file('rechercher.txt'),file('remplacer.txt'),$chaine);

rechercher contenant par exemple

machin
truc
bidule

et remplacer

truc
bidule
chouette
<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006

Ok merci.

Bon je crois que je vais la faire à l'ancienne:

$chaine = str_replace (('[vert]'),"",$chaine);


$chaine = str_replace (('[jaune]'),"",$chaine);

$chaine = str_replace (('[blanc]'),"",$chaine)

Merci encore.
nashoy
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
remplace les chaine

ça sera au moins valide XHTML.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006

Où est la différence ?

nashoy
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Je viens de le dire "ça sera au moins valide XHTML."

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006

Oui d'accord, mais si ça ne change rien au visuel...

nashoy
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
hum.... ça change en terme de politique d'accessibilité, de code plus propre...

ça me fait penser aux gens qui disent que <? et <?php c'est pareil...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
137
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
28 août 2007

Surtout qu'il existe une multitude de fichiers dont les entêtes commencent en <? .

Spyro666 contre le 555
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Dans ce cas là faudra aussi (ce qui n'est pas plus mal) désactiver les short_tags.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>