Как быстрее обойти массив (без ключей). Часть 2.

Добрый день. В продолжение темы «Как быстрее обойти массив (без ключей)» хочу рассказать про несколько других способов обойти массив. А именно функции array_walk и iterator_apply.

Для ленивых foreach вне конкуренции.

Суть теста

Создается массив с 1000000 (одним миллионом) элементов (числа от 1 до 1000000) и кормим этот массив функциям.
$array = range(1,1000000);

$a = null;

ob_start();

/*
array_walk($array,function($v,$k){
	echo $v;
});
//*/

/*
$it = new ArrayIterator($array);
iterator_apply($it, function(Iterator $iterator){
	echo $iterator->current();
	return true;
}, array($it));
//*/

ob_clean();


Результаты

Тест выполнялся в виртуальной машине.
Ubuntu Server 12.04 x64, 4 vCPU, 2.0 GHz, Guaranteed CPU 20%, DDR3 ECC RAM
1333 MHz 4Gb.
PHP 5.4.6-2~precise+1

Тестирование проводилось напрямую из интерпретатора (php -f test.php)

Первый вариант вариант — функция array_walk.
array_walk($array,function)

Результат — 0.80s*

Второй вариант вариант — функция array_walk.
iterator_apply($it, function)

Результат — 1.20s*
Если не инициализировать итератор (допустим он у нас уже есть), то результат будет следующим — 1.00s*
Не большая победа.


* Все приведенные значения времени в статье являются среднеарифметическим от результатов исследования.

0 комментариев

Оставить комментарий