2012-06-26 3 views
0

для этой части кода кто-нибудь знает, почему только первое слово $unuseful заменяется в строке?PHP: str_replace заменяет только первое появление

$unuseful = array(" is ", " the ", " for ", " and ", " with "," that ", " this "," or ", ",",";","/","?","!","."); 
$aux = str_replace($unuseful, " " , $statement); 

«стоимость чувака, который бесплатно чувак» -> стоимость чувака бесплатно чувак „стоимость чувака, который бесплатно чуваку в в в“

-> стоимость чувака бесплатно чувак

Спасибо заранее!

+0

взгляните на этот ответ - http://stackoverflow.com/questions/9436002/str-replace-for-distinct-word –

+0

Не очень элегантным решением было бы вызвать str_replace внутри цикла и прорваться до нет r заменены. Правильным решением было бы использовать регулярное выражение '\ b'. –

ответ

4

Это потому, что вы ставите передние и конечные пробелы.

Он заменяет «» один раз, потому что «» имеет только три места, и вы хотите заменить 4.

+0

должен использовать preg_replace как/(the | this | that) thats \ s/ – Onheiron

+0

Что такое заказ на замену? Вначале он заменяет первое вхождение и переходит к следующему поиску или находит все вхождения и заменяет сразу? –

+0

, но я должен те пустые пробелы до и после него, иначе части слов будут заменены – NiCU

2
for($i=0;$i<count($unuseful);$i++) 
    {$statement = str_replace($unuseful[$i], " " , $statement);} 
$aux=$statement; 
+1

не лучшим решением. и есть ошибка, поэтому только последняя неиспользуемая вещь будет удалена из $ statement и сохранена в $ aux – Ziumin

+0

@ Ziumin fixed .... –

1
<?php 
$unuseful = array('/\s+is\s+/', '/\s+the\s+/', '/\s+for\s+/', '/\s+and\s+/', '/\s+with\s+/','/\s+that\s+/', '/\s+this\s+/','/\s+or\s+/', '/,/','/;/','/\//','/\?/','/\!/','/\./'); 

$challenge = 'dude cost that free the dude the the'; 
echo preg_replace($unuseful, ' ', $challenge)."\n"; 
?> 

дает:

чувак стоимости бесплатно чувак