Могу ли я как-то узнать, какая замена происходит из-за обратного вызова preg_replace_callback? - PullRequest
1 голос
/ 20 марта 2010

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

Я нашел аргумент $ count в определении preg_replace_callback (http://php.net/manual/en/function.preg-replace-callback.php),, который считает замены, но я не уверен, доступен ли он из-за обратного вызова. контекст?

Ответы [ 3 ]

2 голосов
/ 20 марта 2010

Переменная $count out устанавливается только после выполнения всех замен. Вместо этого попробуйте статическую переменную:

function repl($matches) {
    static $count = 0;
    ++$count;
    ...
}
preg_replace_callback('/.../', 'repl', $haystack);
1 голос
/ 20 марта 2010

С php 5.3+ вы также можете использовать замыкание (вместо глобальной или статической переменной)

$counter = 0
preg_replace_callback('/.../', function($matches) use(&$counter) {
  ++$counter;
  ...
  },  $haystack
);
1 голос
/ 20 марта 2010

Вы всегда можете создать нелокальную переменную, чтобы сохранить счет.

...