2016-05-31 2 views
0

У меня есть String $myString, а содержимое String - случайное время «foo», но я не знаю, сколько раз!
Что я хочу сделать, так это добавить уникальный номер для каждого «foo».
Например: "Foo Foo Foo" -> "Foo1 Foo2 foo3"

мой текущий подход: $z = 0; $myString = preg_replace ('/foo/' , 'foo'.++$z, $myString);
и это возвращает конечно "foo1 Foo1 Foo1"
заменить текст повторно в строке по-другому

Так мои вопросы: Как замените ли вы повторный вывод текста в строке по-разному в PHP?

Спасибо!
MasterBolle

ответ

0

Для этого с регулярным выражением путь должен использоваться preg_replace_callback(в руководстве PHP много примеров).

без регулярных выражений, используя explode и array_reduce:

$str = 'foosdfdsfdsfdfoofoosdfdsfdfoosdfoo'; 
$cnt = 0; 
$result = array_reduce(explode('foo', $str), function($c,$i) use (&$cnt) { 
    return $c === false ? $i : $c . 'foo' . ++$cnt . $i; 
}, false); 
1

Вы можете рассчитывать вхождение слова Foo в строке, а затем добавить их с номером для каждого обува обернув число вхождений:

$myString = 'foo foo foo'; 
    $counts = substr_count($myString, 'foo'); 
    $newString = ''; 

    for ($i = 1; $i <= $counts; $i++) { 
     $newString .= 'foo' . $i . ' '; 
    } 
+0

Если это не подходит к делу, вы можете использовать 'preg_replace_callback' и сделать функцию, которая добавляет число в строку, но вы будете иметь для сохранения текущего числа в глобальной переменной, чтобы вы могли увеличить его. – TheFallen

1
$myString = 'foo foo foo'; 
$i = 1; 
echo $myString = preg_replace_callback ('/foo/', 
       function($str) use (&$i) {return $str[0].$i++; }, 
       $myString); // foo1 foo2 foo3 

demo

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