Ну давай посмотрим
/** Get current time with microseconds */
function gettime() {
list($ms, $s) = explode(' ', microtime());
return (float)$s + (float)$ms;
}
define('PAT_COUNT', 20000);
$patterns = array();
$replacements = array();
// The string will be the same for both tests
$string = '';
for ($i = 0; $i < PAT_COUNT; $i++) {
$string .= "$i ";
$patterns[] = "/$i /";
$replacements[] = ":$i:";
}
$start = gettime();
$result1 = preg_replace($patterns, $replacements, $string);
echo "preg_replace with arrays: ".(gettime() - $start)."\n";
$start = gettime();
$result2 = $string;
for($i = 0; $i < PAT_COUNT; $i++) {
$result2 = preg_replace("/$i /", ":$i:", $result2);
}
echo "preg_replace inside of a loop: ".(gettime() - $start)."\n";
И вывод
preg_replace with arrays: 19.568552017212
preg_replace inside of a loop: 20.119801044464
На самом деле это даже немного быстрее, но не заметно. Возможно, потому что в его реализации есть какой-то оптимизированный цикл.
Но кто знает, может, с вашими данными результат будет другим. Попробуйте сделать такой тест с примерами ваших данных.