[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавлять в заменную строку номер замены
7ion
Такая задача.
Необходимо, чтобы при прогоне строки preg_replace в результат добавлялся порядковый номер замены. То есть из этого, например
<div class="news">hjkhjk</div>
<div
class="news">hjkhjk</div>
<div
class="news">hjkhjk</div>
<div
class="news">hjkhjk</div>

сделать это:
<div class="my_mega_news">№1 hjkhjk</div>
<div
class="my_mega_news">№2 hjkhjk</div>
<div
class="my_mega_news">№3 hjkhjk</div>
<div
class="my_mega_news">№4 hjkhjk</div>

Регулярка получается такая:
$content = preg_replace('%<div class="news">(.+?)</div>%', '<div class="my_mega_news">$1</div>', $content);

А как сделать счетчик?

И, да, использование регулярки в моем случае оправданно, это - синтетический пример.

Спасибо.
SlavaFr

echo preg_replace_callback(
'%<div class="news">(.+?)</div>%',
function($match){
static $count=1;
return '<div class="my_mega_news">No'.($count++). ' ' .$match[1] . '</div>';
},
$content
);





_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Игорь_Vasinsky
  $html = '<div class="news">hjkhjk</div>
<div class="news">hjkhjk</div>
<div class="news">hjkhjk</div>
<div class="news">hjkhjk</div>'
;



function getNumber($matches, $i=0)
{
static $i;
return '<div class="my_mega_news">№'.++$i.' '.$matches[1].' </div>';
}

$content = preg_replace_callback('%<div class="news">(.+?)</div>%', 'getNumber', $html);

echo $content;


или в строку

$content = preg_replace_callback('%<div class="news">(.+?)</div>%', 
function($matches, $i=0){
static $i;
return '<div class="my_mega_news">№'.++$i.' '.$matches[1].' </div>';
}, $html);

echo $content;


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
7ion
SlavaFr
Игорь_Vasinsky

Спасибо вам большое!
Именно то, что нужно.

Но, к своему стыду, не понимаю, как это работает.
PHP ведь вызывает функцию каждый раз при нахождении вхождения, верно?
Почему же счетчик при новом вызове функции не сбрасывается?
Placido
Читаем о статических переменных.
http://php.net/manual/ru/language.variables.scope.php
Игорь_Vasinsky
Цитата
Читаем о статических переменных.


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
7ion
Ого, какой я пласт знаний упустил.
Спасибо всем большое, все понял!
Быстрый ответ:

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