2015-07-29 4 views
1

Я хочу вставить символ   после некоторых союзов. переменная $ cont имеет некоторый текст. Мой код:preg_replace in for loop

$conjs = array ('i', 'a', 'w'); 
$size = sizeof($conjs); 
$replacm = ' $1 '; 

for ($i=0; $i < $size; $i++){ 
    $pattern = '/\s(' . $conjs[$i] . ')(\s)/'; 
    $replaced = preg_replace($pattern, $replacm, $cont); 
} 

print $replaced; 

Это возвращает $ cont текст, измененный только с помощью последнего элемента массива ("w"). Что я делаю неправильно?

+0

'preg_replace()' принимает массив в качестве аргумента, так что вы можете просто сделать: 'паттерны = array_map (функция $ ($ v) {return "/ \ s (". $ v. ") (\ s) /";}, $ conjs); echo $ replace = preg_replace ($ patterns, "$ 1  ", $ cont); ' – Rizier123

+0

[Не использовать' sizeof() 'для получения длины массива] (http://php.net/manual/fr/function .sizeof.php # 85892). – D4V1D

+0

Но что здесь '$ cont' здесь –

ответ

1

попробуйте изменить ваш for на:

for ($i=0; $i < $size; $i++){ 
    $pattern = '/\s(' . $conjs[$i] . ')(\s)/'; 
    $cont= preg_replace($pattern, $replacm, $cont); 
}  
+0

Вы каждый раз декларируете' $ replace' в вашем цикле, поэтому '$ replace' заменяется. – Clyff

+0

большое спасибо! – RustBeard

0

Рабочий пример

$cont = 'any text word'; 
$conjs = array ('i', 'a', 'w'); 
$size = sizeof($conjs); 
$replacm = '$'; 

for ($i=0; $i < $size; $i++){ 
    $pattern = '/' . $conjs[$i] . '/';  
    $cont= preg_replace($pattern, $replacm, $cont); 
} 

print $cont;