PHP-тест операторов цикла с массивом. FOR, WHILE или FOREACH?


PHP

Решил протестировать скорость работы операторов цикла на одномерном массиве:

  1. оператор FOR
  2. оператор WHILE
  3. оператор FOREACH

PHP Version 5.2.5

Для примера я использовал обработку массива из 300000 элементов.
Результат:

time1: 1.4654 s
time2: 0.1526 s
time3: 0.1374 s
time1 - time2: 89.59 %
time2 - time3: 9.96 %

По результатам, на 1-ом месте оказался FOREACH, который обошел в скорости WHILE на 10%. Я был удивлен, но FOR, занявший последнее место, оказался самым медленным и отставал на 90% от оператора WHILE.

Пример PHP-кода, который я использовал для тестирования:

<?php
$arr = array();
for($i = 0; $i < 300000; $i++) $arr[] = $i;

$time_start1 = microtime(1);
$n = sizeof($arr);
for($i = 0; $i < $n; $i++) {
$a = $arr[$i];
}
$time_end1 = microtime(1);
$time1 = round($time_end1 - $time_start1, 4);

$i = 0;
$time_start2 = microtime(1);
$n = sizeof($arr);
while($i < $n) {
$a = $arr[$i];
$i++;
}
$time_end2 = microtime(1);
$time2 = round($time_end2 - $time_start2, 4);

$time_start3 = microtime(1);
foreach($arr as $key => $val) {
$a = $val;
}
$time_end3 = microtime(1);
$time3 = round($time_end3 - $time_start3, 4);

echo 'time1: ' . $time1 . ' s';
echo 'time2: ' . $time2 . ' s';
echo 'time3: ' . $time3 . ' s';

echo 'time1 - time2: ' . round((100 * ($time1 - $time2))/$time1, 2) . ' %';
echo 'time2 - time3: ' . round((100 * ($time2 - $time3))/$time2, 2) . ' %';
?>

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

Share

Читайте ещё похожие статьи на этом сайте:

  1. PHP-тест на производительность (присваивание)
  2. PHP-тест. Что быстрее var_export или print_r?
  3. PHP дробная часть числа
  4. PHP функция для конвертирования размеров файла (*KB, *MB, *GB)
  5. Автоматическая авторизация в MaxDSL через PHP-скрипт, Internet — MoldTelecom
1 балл2 балла3 балла4 балла5 баллов (1 голосов, среднее: 5,00 из 5)
Loading ... Loading ...
PHP, Программирование


Если Вам понравилась эта статья, пожалуйста оставьте свой комментарий или подпишитесь на RSS-канал и получайте в будущем статьи на RSS Reader.

Комментарии

13 комментария (ев) для “PHP-тест операторов цикла с массивом. FOR, WHILE или FOREACH?”

Написать комментарий

(обязательно)

(обязательно, не публикуется)