Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2015, 11:55   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Производительность циклов

Добрый день уважаемые, использую следующий код:

Код:
$array = array_fill(0, 1000, '');
$start = microtime(true);
foreach($array as $key => $elem){
	$array[$key] .= 'a';
}
$end = microtime(true);
$time = $end - $start;
$time = $time * 1000;

echo 'foreach with key: '.$time."\r\n";
unset($array);

$array = array_fill(0, 1000, '');
$start = microtime(true);
for($i = 0; $i < count($array); $i++){
	$array[$i] .= 'a';
}
$end = microtime(true);
$time = $end - $start;
$time = $time * 1000;

echo 'for count in: '.$time."\r\n";
unset($array);

$array = array_fill(0, 1000, '');
$counter = count($array);
$start = microtime(true);
for($i = 0; $i < $counter; $i++){
	$array[$i] .= 'a';
}
$end = microtime(true);
$time = $end - $start;
$time = $time * 1000;

echo 'for count out: '.$time."\r\n";
unset($array);
Получаю:
Код:
foreach with key: 0.25105476379395
for count in: 0.22101402282715
for count out: 0.14090538024902
Не то что бы я жаловался, но на просторах нета тьма информации что foreach быстрее, а получается что нет, так же и по count внутри for.

Может что-то не так делаю и ошибка в коде теста ?
L6go1as вне форума Ответить с цитированием
Старый 17.08.2015, 13:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на просторах нета тьма информации что foreach быстрее
Мона ссыль на нее?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2015, 14:07   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Мона ссыль на нее?
Конечно,
http://phpbench.com/
http://m.metamorphosite.com/php-benc...ops-arrays#For
L6go1as вне форума Ответить с цитированием
Старый 17.08.2015, 22:07   #4
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

не чо подобного, while побыстрее всех будет, проверьте сами
uberchel вне форума Ответить с цитированием
Старый 17.08.2015, 23:48   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

«Быстрота» foreach вызывает сомнение – хотя бы потому, что в большинстве случаев эта конструкция создаёт копию массива, на что уходит некоторое время, довольно приличное – по некоторым оценкам до 30% рабочего времени. Хотя и есть «хаки», позволяющие избежать этого копирования – используются они довольно редко.
«Тормоза» foreach также могут увеличиваться, когда в процессе выполнения происходит модификация итерируемого массива – что наглядно и демонстрирует тест из первого поста.
Простое чтение массива происходит обычно быстрее, чем чтение+модификация.
Более детально: О тонкостях работы foreach в PHP

По поводу использования count внутри/снаружи for – здесь тест демонстрирует очевидное: использование единожды определенного ранее размера массива значительно быстрее, чем вычисление этого размера заново при каждой итерации цикла.

Последний раз редактировалось Andkorol; 17.08.2015 в 23:53.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MySql производительность dr.Chas SQL, базы данных 6 27.03.2014 16:07
MidletPascal производительность. O m n i s Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 21.11.2013 16:37
Фриланс и производительность Abuhamed Свободное общение 6 09.04.2013 20:16
Производительность компьютера Сhimit Компьютерное железо 0 20.05.2011 19:42
Производительность БД NARKOM Софт 1 02.06.2010 13:51