2013-02-17 3 views
2

У меня есть строка, как:Анализировать String - удалить некоторые слова из строки

$text = 'Hello this is my string and texts'; 

У меня есть не допускается слов в массиве:

$filtered_words = array(
      'string', 
      'text' 
     ); 

Я хочу, чтобы заменить все фильтруется слова в мой $text с ***, так что я писал:

$text_array = explode(' ', $text); 
     foreach($text_array as $key => $value){ 
      if(in_array($text_array[$key], $filtered_words)){ 
       $text = str_replace($text_array[$key], '***', $text); 
      } 
     } 
echo $text; 

Выход:

Hello this is my *** and texts 

Но мне нужна функция также заменить texts с ***, поскольку он также содержит отфильтрованный слово (текст).

Как я мог это достичь?

Благодаря

+0

http://php.net/str_replace - поиск * массива *, он работает. Строка-заменитель - '***' - просто проверьте, что PHP-файл PHP это делает из коробки - см. [Ответ] (http://stackoverflow.com/a/14919021/367456) – hakre

ответ

10

Вы просто можете сделать это прямо сейчас, str_replace не поддерживает замену из массива в одну строку:

$text = 'Hello this is my string and texts'; 

$filtered_words = array(
    'string', 
    'texts', 
    'text', 
); 

$zap = '***'; 

$filtered_text = str_replace($filtered_words, $zap, $text); 

echo $filtered_text; 

Выход (Demo):

Hello this is my *** and *** 

Позаботьтесь, чтобы у вас были самые большие слова в первую очередь и имейте в виду, когда str_replace находится в этом режиме, он будет делать одну замену после othe r - как в вашей петле. Поэтому более короткие слова - если раньше - могут быть частью более крупных слов.

Если вам нужно что-то более безопасное, вы должны сначала рассмотреть текстовый анализ. Это также может сказать вам, если вы не знаете о словах, которые вы, возможно, захотите заменить, но вы пока не думали.

+1

+1 для деталей. Ваш ответ более полный, чем мой. – dfsq

+0

исключить слово 'text' из $ filter_words, тогда выход будет' Hello, это мои *** и *** s', но это должно быть 'Hello, это мои *** и ***' – behz4d

+0

Thank вы очень! – rdllngr

2

str_replace может принять массив в качестве первого параметра. Поэтому нет необходимости в какой-либо for each петли на всех:

$filtered_words = array(
    'string', 
    'text' 
); 
$text = str_replace($filtered_words, '***', $text); 
+0

короткий и сладкий! – behz4d

Смежные вопросы