http://habrahabr.ru/post/11553/
Автор этой статьи, в разделе "Этап 1. Пишем" пишет следующее:
Цитата |
Для итерации по массивам, их изменению и фильтрации — учимся использовать array_* функции в пхп. Особенно лямбда-функции:<?php // А вы бы сделали это циклом? Ай-ай-ай... |
$a = range(1, 100000);
$s = microtime(1);
$m = memory_get_usage();
foreach($a as $k => $v){
$a[$k] .= 'text';
}
$time = microtime(1) - $s;
$m = memory_get_usage() - $m;
echo 'foreach by key: <br />time: '.$time.'<br />memory: '.$m.'bytes<br /><br />';
$a = range(1, 100000);
$s = microtime(1);
$m = memory_get_usage();
foreach($a as &$v){
$v .= 'text';
}
unset($v);
$time = microtime(1) - $s;
$m = memory_get_usage() - $m;
echo 'foreach by reference: <br />time: '.$time.'<br />memory: '.$m.'bytes<br /><br />';
$a = range(1, 100000);
$s = microtime(1);
$m = memory_get_usage();
$c = count($a);
for($i = 0; $i < $c; $i++){
$a[$i] .= 'text';
}
$time = microtime(1) - $s;
$m = memory_get_usage() - $m;
echo 'for: <br />time: '.$time.'<br />memory: '.$m.'bytes<br /><br />';
$a = range(1, 100000);
$s = microtime(1);
$m = memory_get_usage();
array_walk($a, create_function('&$v', '$v .= "text";'));
$time = microtime(1) - $s;
$m = memory_get_usage() - $m;
echo 'array_walk: <br />time: '.$time.'<br />memory: '.$m.'bytes<br /><br />';
foreach by key:
time: 0.12844800949097
memory: 3596508bytes
foreach by reference:
time: 0.076018095016479
memory: 3595988bytes
for:
time: 0.074935913085938
memory: 3596608bytes
array_walk:
time: 0.16262006759644
memory: 3597156bytes