2010-10-29 4 views
0

Voici mon code actuel:déclarations foreach multiples dans le script PHP

foreach ($swears as $bad_word) 
$body = str_ireplace($bad_word, "", $body); 

C'est le filtrage mauvais mots, mais je voudrais aussi filtrer un « : » à un « - » dans le corps. Comment puis-je avoir plusieurs instructions foreach dans mon script?

+0

Utiliser 'strtr ($ body, $ ne jure)' (documentation: http://php.net/manual/en/function.strtr.php) pour mauvaise mot de remplacement aussi. (Nécessite une modification du tableau $ swears: '$ swear => $ replacement') – rojoca

+0

De plus, cela ne fonctionnera généralement pas comment vous le pensez: [The Clbuttic Mistake] (http://thedailywtf.com/Articles/The -Clbuttic-Mistake-.aspx) ... (Indice: remplacer une "malédiction" commune par son synonyme plus politiquement correct) ... – ircmaxell

Répondre

3

Utilisez des accolades?

foreach($swears as $bad_word) 
{ 
    $body = str_ireplace($bad_word, "", $body); 
    $body = str_ireplace(":", "-", $body); 
} 

ou des tableaux dans str_ireplace:

foreach($swears as $bad_word) 
    $body = str_ireplace(array(":", $bad_word), array("-", ""), $body); 
+0

Pourquoi boucleriez-vous le ':' remplacer? Il fera quelque chose la première fois et ne fera aucune autre modification. Il est préférable de mettre cela en dehors de la boucle. Ou mieux encore, n'utilisez pas de boucle: '$ body = str_ireplace ($ swears, '', $ body); $ body = str_replace (':', '-', $ body); ' – ircmaxell

+0

D'accord - Je mettrais la partie:/- en dehors de la boucle - mais la question était de savoir comment il pourrait avoir ce remplacement dans la boucle. – Repox

+0

En outre - il n'a pas besoin de la boucle. Le simple fait d'utiliser le tableau $ jure à l'intérieur de str_ireplace() en tant que premier paramètre pourrait complètement supprimer la boucle. – Repox

3

Les mettre l'un après l'autre?

Par exemple:

foreach($swears as $bad_word) 
    $body = str_ireplace($bad_word, '', $body); 

$replace_chars = array(
    ':' => '-', 
    '?' => '!'); 
foreach($replace_chars as $char => $rep) 
    $body = str_replace($char, $rep, $body); 

Si vous ne disposez que d'un caractère supplémentaire que vous voulez remplacer, il suffit d'utiliser str_replace() à nouveau, par lui-même, en dehors du foreach(), au lieu d'utiliser le tableau $replace_chars et le second foreach().

+0

-1, veuillez expliquer? – mway

0

Je ne vois pas pourquoi vous auriez besoin d'un autre foreach pour cela. Mais si vous l'avez fait, rien ne vous empêche d'en avoir un autre.

0

Vous pouvez utiliser des tableaux dans stri_replace

$body = str_ireplace($bad_words, '', $body); 
$body = str_replace(':', '-', $body); 

Une autre façon de le faire avec un seul remplacement, ce qui fonctionne bien si vous avez plus de réseaux de filtres (vous pouvez utiliser array_merge pour ajouter d'autres remplacements)

$filters = $bad_words; 
$replacements = array_fill(0, count($bad_words), ''); 

$filters[] = ':'; 
$replacements[] = '-'; 

$body = str_ireplace($filters, $replacements, $body); 
+0

Je voudrais +1, mais vous n'avez pas besoin d'un tableau de chaînes vides pour la pièce de rechange. Une seule chaîne '''' suffira ... – ircmaxell

+0

ah, je ne le savais pas. merci irc! Mis à jour en conséquence. – enobrev

+0

euh, alors pourquoi le downmod (ircmaxell n'a pas été démodé avec ce commentaire)? Au moins commenter pour expliquer le problème. – enobrev

1

Toutes les réponses sont terribles. Vous n'avez pas besoin d'une boucle foreach. Voici comment il devrait se faire:

$filter = array(
    ':'  => '-', 
    'badword' => '', 
    'anotherbad' => '' 
); 
$body = str_ireplace(array_keys($filter), $filter, $body); 
+1

Dois-je maintenant downvote * vous * puisque vous auriez pu faire '$ body = str_ireplace (array (':', 'badword', 'otherbad '), array (' - '), $ body); Ou voulez-vous juste vous installer un peu? –

+0

Désolé, mais c'est une implémentation moins qu'idéale. Essayez d'éditer une liste de filtres de 100 avec cette méthode! Ce serait trop lourd. La méthode affichée facilite l'ajout et la modification de la liste de filtres à tout moment dans le futur. – jusunlee