Здравствуйте!
Всегда, когда нужно было применить что-либо к каждому элементу массива пользовался конструкцией
foreach ($array as &$item)
, но наличие специальной функции
array_walk не давало покоя.
На досуге решил протестировать оба варианта:
1. с циклом:
$t = microtime(true);
$array = array_fill(0, 1000000, 'hello world');
foreach ($array as &$item) {
$item = 'hello!';
}
echo microtime(true) - $t;
echo '<br>';
echo memory_get_usage();
2. array_walk:
$t = microtime(true);
$array = array_fill(0, 1000000, 'hello world');
array_walk($array, function(&$item){
$item = 'hello!';
});
echo microtime(true) - $t;
echo '<br>';
echo memory_get_usage();
Получились такие результаты для миллиона элементов:
100304928 байт и 0,33 секунды для foreach и 100305424 байт и 0,86 секунды для array_walk
То есть циклом оказалось еще и более, чем в два раза быстрее.
Что можете сказать по этому поводу?
Для чего было вводить функцию array_walk, уступающую языковым конструкциям?
p.s. спортивный интерес.