[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выполнить изменение шаблона внутри текста
pyfik
Доброго времени суток имеется текст следующего вида:
Цитата
text text %# text text text %# text text text %# text

Необходимо получить
Цитата
text text %1# text text text %2# text text text %3# text


Можно конечно пройтись циклом и делать поиск глубиной 1 по шаблону '/%#/' но мне кажется можно сделать как-то попроще



Спустя 27 минут, 33 секунды (17.11.2011 - 22:08) Игорь_Vasinsky написал(а):
а на твою реализацию в цикле взглянуть можно? а то я набрасал, вдруг перемудрил..

Спустя 29 минут, 4 секунды (17.11.2011 - 22:37) pyfik написал(а):
Мой вариант

$string = 'text text %# text text text %# text text text %# text';
$count = substr_count($string, '%#');
for($i = 1; $i <= $count; ++$i) {
$string = preg_replace ('/%#/', "%$i#", $string, 1);
}
echo $string;

Спустя 6 минут, 52 секунды (17.11.2011 - 22:44) Игорь_Vasinsky написал(а):
специально замудрил

Свернутый текст

$str = "text text %# text text text %# text text text %# text";
$match = preg_split("#%#", $str);
$str = null;
$i = 0;
foreach($match as $key=>$value)
$str .= "%".$i++.$value;
echo substr($str, 2);

Спустя 16 минут, 55 секунд (17.11.2011 - 23:01) pyfik написал(а):
хочется решения без циклов, если это возможно

Спустя 59 минут, 40 секунд (18.11.2011 - 00:01) Winston написал(а):
Мой вариант :)
$str = 'text text %# text text text %# text text text %# text';
echo preg_replace_callback('/%#/', create_function('', 'static $i = 1; return "%" . $i++ . "#";'), $str);


Если у тебя РНР >= 5.3 можно так написать
echo preg_replace_callback('/%#/', function(){ static $i = 1; return '%' . $i++ . '#';}, $str);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.