foreach vs array_walk (PHP)

Для обработки значений массива обычно используют два способа: foreach ($array as $key => $value) и array_walk($array, callable $function).

Задача

Сравнить оба способа по скорости выполнения.

В качестве исходных данных возьмем обычный массив, заполненный числами при помощи функции array range(mixed $start ,mixed $limit [, number $step = 1]).

Тесты

Проведем 4 теста с количеством элементов массива: 10000, 50000, 100000, 500000.

<?php // тест для foreach function foreach_test($range) { // массив $array = range(1, $range); // старт $start = microtime(true); // обработка массива foreach ($array as &$value) { $value /= 2; } // финиш $finish = microtime(true); // время выполнения return round($finish - $start, 5); } // тест для array_walk function array_walk_test($range) { // массив $array = range(1, $range); // старт $start = microtime(true); // обработка array_walk($array, function(&$value){ $value /= 2; }); // финиш $finish = microtime(true); // время выполнения return round($finish - $start, 5); } // тесты $tests = array(10000, 50000, 100000, 500000); // выполнение тестов и результаты foreach ($tests as $range) { $ft = foreach_test($range); $awt = array_walk_test($range); $div = round($awt / $ft, 2); echo "Количество элементов: {$range} <br>"; echo "Время foreach: {$ft}с <br>"; echo "Время array_walk: {$awt}с <br>"; echo "foreach быстрей array_walk в {$div} раз <br><br>"; }

Результат

Результаты тестов показали что foreach быстрее array_walk примерно в ~4.5 раза.

Количество элементов: 10000 Время foreach: 0.00139с Время array_walk: 0.00672с foreach быстрей array_walk в 4.83 раз Количество элементов: 50000 Время foreach: 0.007с Время array_walk: 0.03377с foreach быстрей array_walk в 4.82 раз Количество элементов: 100000 Время foreach: 0.01466с Время array_walk: 0.07021с foreach быстрей array_walk в 4.79 раз Количество элементов: 500000 Время foreach: 0.07656с Время array_walk: 0.33994с foreach быстрей array_walk в 4.44 раз

Ресурсы

Тесты проводились на Intel Pentium Dual CPU E2180 2.00ГГц, 6Гб, Windows 7 (64), Apache 2.2, PHP 5.3.13

Категории

ПрограммированиеPHPМассивыМассивы в PHP

Комментарии