при использовании preg_replace и массива с несколькими индексами наблюдается снижение производительности или какой-либо другой негативный фактор - PullRequest
2 голосов
/ 20 июня 2011

есть ли снижение производительности или какой-то другой негативный фактор при использовании preg_replace и массива с несколькими индексами?

$string = 'The quick brown fox jumped over the lazy dog.';

$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
...
$patterns[100] = '/fox/';

$replacements[0] = 'bear';
$replacements[1] = 'black';
...
$replacements[100] = 'slow';

echo preg_replace($patterns, $replacements, $string);

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Ну давай посмотрим

/** 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

На самом деле это даже немного быстрее, но не заметно. Возможно, потому что в его реализации есть какой-то оптимизированный цикл.

Но кто знает, может, с вашими данными результат будет другим. Попробуйте сделать такой тест с примерами ваших данных.

0 голосов
/ 27 июля 2011

Для таких простых поисков я рекомендую str_replace вместо регулярного выражения. Также лучше развернуть цикл или использовать устройство Duff, если вы хотите сравнить цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...