У меня есть этот код:
$count = 0;
preg_replace('/test/', 'test'. $count, $content,-1,$count);
Для каждой замены я получаю test0.
Я хотел бы получить test0, test1, test2 и т.д.
Используйте preg_replace_callback ()
:
$count = 0;
preg_replace_callback('/test/', 'rep_count', $content);
function rep_count($matches) {
global $count;
return 'test' . $count++;
}
Используйте preg_replace_callback ()
:
class TestReplace {
protected $_count = 0;
public function replace($pattern, $text) {
$this->_count = 0;
return preg_replace_callback($pattern, array($this, '_callback'), $text);
}
public function _callback($matches) {
return 'test' . $this->_count++;
}
}
$replacer = new TestReplace();
$replacer->replace('/test/', 'test test test'); // 'test0 test1 test2'
Примечание. Использование global
] - надежное решение, но оно вызывает некоторые проблемы, поэтому я не рекомендую его.
preg_replace_callback()
позволит вам работать с матчем, прежде чем возвращать его для последующей замены.