Foreach очень тормозит.

asics

Новичок
Foreach очень тормозит.

Есть 2 варианта кода, первый лаконичный, но почему-то раз в 10 медленнее выполняется, чем второй.
1 код:
PHP:
<?php
$valuti=array('wmr','wmz','wme','wmu','wmy','wmb','wmg','gold','yandex',
'rupay','rur_moneymail','usd_moneymail','eur_moneymail','rur_rbk','usd_pecunix',
'eur_pfctmoney','usd_pfctmoney','usd_v_money','eur_liberty','usd_liberty','altgld_usd',
'ukrm_usd','ukrm_uah','c_gold_usd','numox_usd','paypal','zpaym','fethard_usd','alertpay',
'easyp_blr','mnybook','w1_rur','sms');

foreach ($valuti as $valuta_L) {
foreach ($valuti as $valuta_R) {

preg_match('/(?<!\d)'.$valuta_L.','.$valuta_R.',(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_wmr);

echo $valuta_L.'_'.$valuta_R.'<br>';
}}
?>
2 код(здесь вместо второго перебора массива foreach просто вручную забиты все валюты вместо 'valuta_R'):
PHP:
<?php
$valuti=array('wmr','wmz','wme','wmu','wmy','wmb','wmg','gold','yandex',
'rupay','rur_moneymail','usd_moneymail','eur_moneymail','rur_rbk','usd_pecunix',
'eur_pfctmoney','usd_pfctmoney','usd_v_money','eur_liberty','usd_liberty','altgld_usd',
'ukrm_usd','ukrm_uah','c_gold_usd','numox_usd','paypal','zpaym','fethard_usd','alertpay',
'easyp_blr','mnybook','w1_rur','sms');

foreach ($valuti as $valuta_L) {

preg_match('/(?<!\d)'.$valuta_L.',wmr,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_wmr);
preg_match('/(?<!\d)'.$valuta_L.',wmz,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_wmz);
preg_match('/(?<!\d)'.$valuta_L.',wme,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_wme);
...
...
...
preg_match('/(?<!\d)'.$valuta_L.',paypal,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_paypal);
...
...
...
preg_match('/(?<!\d)'.$valuta_L.',sms,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_sms);
preg_match('/(?<!\d)'.$valuta_L.',zpaym,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_zpaym);
preg_match('/(?<!\d)'.$valuta_L.',alertpay,(\d*\.\d*|\d*),(\d*\.\d*|\d*)\;/',$content,$_alertpay);


echo $valuta_L.'_'.$valuta_R.'<br>';
}
?>
Вопрос почему первый вариант настолько медленнее второго? Я ожидал примерно равной скорости.
 

dimagolov

Новичок
asics, ты что-то не договариваешь. потому что что первый, что второй код, смысла не имеют, так как результаты preg_match никак не используются. Кроме того, во втором случае вывод происходит во внешнем цикле, а в первом во внутреннем.

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

asics

Новичок
да я упрощенно написал. они в базу потом заносятся.

-~{}~ 21.03.09 17:05:

Автор оригинала: dimagolov
есть подозрение, что по времени отображения страницы.
Просто загрузки страницы в 10 раз дольше ждать приходится.
 

DiMA

php.spb.ru
Команда форума
тормозит динамическое создание шаблона в регах
так делать нельзя
 

dimagolov

Новичок
Просто загрузки страницы в 10 раз дольше ждать приходится.
это ты меряешь время загрузки страницы, которое со временем работы скрипта не имеет ничего общего. и страницы судя по коду сильно разные - первая в 33 раза больше второй
 

DiMA

php.spb.ru
Команда форума
что тут не понятного? "рег"? "шаблон"? "динамический"?

не используй переменные в первом аргументе preg_match

и не отвечай мне, что тебе так надо. Не надо. Напряги опилки, сделай фиксированный шаблон.
 

asics

Новичок
т.е. первая медленнее второй из-за того, что в 1 варианте в регулярке 2 переменные, а во втором 1 переменная?

-~{}~ 21.03.09 17:35:

Фиксированный шаблон, это если только вручную забить, а не массивом перебирать (
 

DiMA

php.spb.ru
Команда форума
мля... у тебя все в порядке? Мне плевать на твои тесты скорости. В третий раз тебе повторяю как сделать правильно: не использовать динамические шаблоны. И без $, и без повтора preg_match.

-~{}~ 21.03.09 17:37:

> Фиксированный шаблон, это если только вручную забить, а не массивом перебирать (

Подсказка. Сформируй шаблон рега ДО цикла (программно, в другом цикле) со всеми вариантами валют. Их - в отдельные ( скобки ). После рега анализируешь.
 

asics

Новичок
Спасибо, Дим. Буду думать...

-~{}~ 21.03.09 17:51:

Эврика! Дима, ты гений! )
 

weregod

unserializer
asics
и научитесь время работы скрипта с временем отображения результатов его работы в браузере не путать
 

Димон

Новичок
вероятно, что когда работает второй скрипт ты смотришь какой-нить фильм и качаейшь пару mp3 с буржуйского сайта :D
 

DiMA

php.spb.ru
Команда форума
> качаейшь пару mp3

у тебя забитый инет-канал тормозит процессор или шину данных? сочувствую

> ты смотришь какой-нить фильм

лежа на диване отлаживаешь пхп? сочувствую
одноядерный процессор занят фильмом, а не пхп? сочувствую
 
Сверху