[PHP] preg_match() в цикле против preg_match_all()

12
O
На сайте с 29.05.2008
Offline
195
3964

Здравствуйте.

Пишу шаблонизатор для локальной системы учета и менеджмента. Столкнулся с вопросом оптимизации замены поиска и замены тегов.

Что будет быстрее выполнятся:

while (preg_match(...,$key,$matches)) {

...$key = preg_replace($matches[0],...,$key);

}

или же

preg_match_all(...,$key,$matches);

foreach ($matches[0] as $value) {

...$key = preg_replace($value,...,$key)

}

Склоняюсь ко второму варианту. Но первый выглядит лучше, его я изначально и использовал. Пробовал провести эксперимент с microtime до и после, но в случае с foreach выдает отрицательно значение (и это при 50000 повторов).

C
На сайте с 04.02.2005
Offline
277
#1

man preg_replace

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

Это я к чему...

Заполните два массива

1 -Что менять

2- На что менять

А затем уже после цикла все одним махом.

O
На сайте с 29.05.2008
Offline
195
#2

Вы о чем? Я спрашиваю о производительности этих двух вариаций? Что будет быстрее, одним махом получил всем совпадения по регулярному выражению в массив и уже потом через foreach выполнять модификации ИЛИ на ходу искать-модифицировать значение по порядку через while цикл.

--------

Понял о чем. По вашей схеме +1 задача (подготовка массива замены).

siv1987
На сайте с 02.04.2009
Offline
427
#3

Производительность что первая что вторая почти будут одинаковы

но второй вариант смотрится лучше имхо

O
На сайте с 29.05.2008
Offline
195
#4

siv1987, это не совсем string, а файловый ресурс полученный с помощью file_get_contents()...

Может есть способ провести реальное тестирование быстродействия каждого из вариантов?

C
На сайте с 04.02.2005
Offline
277
#5

по производительности на 10 миллисекунд будет работать preg_match_all

за счет скомпилированного кода...

O
На сайте с 29.05.2008
Offline
195
#6

Chukcha, быстрее, верно?

C
На сайте с 04.02.2005
Offline
277
#7

ну глядите...

цикл интерпретатора медленнее цикла скомпилированного кода.

Так понятней?

LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#8
ortegas:
Chukcha, быстрее, верно?

Если у вас 10 миллионов запросов, тогда можете думать о быстрее или не быстрее.

Всё остальное не играет роли.

0,0005

или

0,0006

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
O
На сайте с 29.05.2008
Offline
195
#9

Chukcha, да. 10 миллисекунд много. У меня сейчас скрипт выполняется за 48 милисекунд... И циклов там штук 20 минимум.

---------- Добавлено 05.10.2012 в 23:45 ----------

LEOnidUKG, играет. Вкупе это может дать молниеносную производительность.

C
На сайте с 04.02.2005
Offline
277
#10

Самым тонким местом есть "толстый" канал связи и сервер БД

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий