После выхода PHP5.3 теперь мы можем использовать замыкание и ключевое слово use
, чтобы обойти проблему global
, поднятую Эмилем выше:
<code> $text = "item1,\nitem2,\nFINDME:23623,\nfoo1,\nfoo2,\nfoo3,\nFINDME:923653245,\nbar1,\nbar2,\nFINDME:43572342,\nbar3,\nbar4";
$pattern = '/FINDME:(\d+)/';
$count = 1;
$text = preg_replace_callback( $pattern
, function($match) use (&$count) {
$str = "Found match $count: {$match[1]}!";
$count++;
return $str;
}
, $text
);
echo "<pre>$text
";
Что возвращает:
item1,
item2,
Found match 1: 23623!,
foo1,
foo2,
foo3,
Found match 2: 923653245!,
bar1,
bar2,
Found match 3: 43572342!,
bar3,
bar4
Обратите внимание на use (&$count)
, следующий за именем функции - это позволяет нам читать $count
в области действия функции (& делает ее переданной по ссылке и, следовательно, доступной для записи из области функции).