Remplacements de mots dans une chaine en PHP

WRInaute accro
Je cherche une manière efficace de supprimer très rapidement dans une chaîne de caractères une liste de mots.

J'ai pensé le faire avec strtr mais, alors, il ne remplace pas des mots mais des caractères.

J'ai pensé aussi passer par des tableaux en explosant ma chaine via explode puis en calculant la différence via array_diff puis ensuite en recomposant une chaine via implode.

Vous en pensez quoi ?

Avez-vous une meilleure idée ?

Merci d'avance.
 
WRInaute occasionnel
ereg_replace (le_mot_que_tu_recherche, ce_que_tu_veux_mettre_en_remplacement(donc ici tu mets ""), ta_chaine_de_caractere)

plus d'info : -http://www.nexen.net/docs/php/annotee/function.ereg-replace.php
 
WRInaute occasionnel
str_replace peut prendre un tableau en entrée/sortie, donc tu peux faire :

$asupprimer = Array("mot1","mot2","mot3");
$chaine = str_replace($asupprimer,"",$chaine);
 
WRInaute accro
jerome347 a dit:
str_replace peut prendre un tableau en entrée/sortie, donc tu peux faire :

$asupprimer = Array("mot1","mot2","mot3");
$chaine = str_replace($asupprimer,"",$chaine);

str_replace remplace aussi des caractères, pas des mots.
 
WRInaute occasionnel
ecocentric a dit:
str_replace remplace aussi des caractères, pas des mots.
Gna ?

Dans la doc il y a un exemple :
// Provides: You should eat pizza, beer, and ice cream every day
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, $yummy, $phrase);

Cet exemple marche bien chez moi (et j'utilise str_replace pour remplacer des mots/chaines dans plusieurs scripts sans soucis).
 
WRInaute accro
psykoko a dit:
ereg_replace

remplace une chaine de caractère ;)

Et preg_replace peut prendre des tableaux.

Par contre, je ne capte pas, mon code de donne rien, dès que je rajoute les \b ...

Code:
$temp = $from;
$n = count ($arwords);
for ($i=0; $i<$n; $i++)
	$temp = ereg_replace ("/\b".$arwords[$i]."\b/i", "", $temp);
$to = $temp;
 
WRInaute accro
jerome347 a dit:
ecocentric a dit:
str_replace remplace aussi des caractères, pas des mots.
Gna ?

Dans la doc il y a un exemple :
// Provides: You should eat pizza, beer, and ice cream every day
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, $yummy, $phrase);

Cet exemple marche bien chez moi (et j'utilise str_replace pour remplacer des mots/chaines dans plusieurs scripts sans soucis).

Je n'ai pas dit que ça ne marche pas. Ce que je dis, c'est que si tu lui mets "ice", par exemple, il va t'amputer "iceberg". Je veux une fonction qui permette de ne supprimer que des mots entiers.
 
WRInaute accro
psykoko a dit:
ereg_replace

remplace une chaine de caractère ;)

Merci. En fait, preg_replace, qui est repris sur la page de ereg_replace me convient mieux. Par contre, j'ai toujours un problème avec cette @?#& d'expression régulière ;-) !
 
WRInaute accro
Arf, ça y est, ça marche avec preg_replace :

Code:
$n = count ($arwords);
for ($i=0; $i<$n; $i++)
	$arwords1[$i] = "/\b".$arwords[$i]."\b/i";
$arwords2 = array_fill(0, $n, "");
$to = preg_replace($arwords1, $arwords2, $from);
echo "<p> LEN preg_replace : ".strlen($to)."</p>";
echo "<p>$to</p>";

Yapluka nettoyer le code.

Merci à tous pour l'aide.
 
Discussions similaires
Haut