Remplacements de mots dans une chaine en PHP

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.
 
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
 
str_replace peut prendre un tableau en entrée/sortie, donc tu peux faire :

$asupprimer = Array("mot1","mot2","mot3");
$chaine = str_replace($asupprimer,"",$chaine);
 
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.
 
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).
 
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;
 
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.
 
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 ;-) !
 
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.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut