Не могу понять какая разница между array_map()
и array_walk()
?
На php.net написано
array_walk — Применяет заданную пользователем функцию к каждому элементу массива. array_map — Применяет callback-функцию ко всем элементам указанных массивов.
Вся разница только в том, что walk работает с одним массивом, а map может обрабатывать несколько? Тогда какой смысл от array_walk()
? Ведь можно использовать array_map()
.
array_map
не может изменять значения внутри входных массивов, пока array_walk
может; в частности, array_map
никогда не меняет своих аргументов.Доступ к ключам доступа:
array_map
не может работать с ключами массива, array_walkможет.array_map
возвращает новый массив, array_walk
возвращает true/false
.
Следовательно, если вы не хотите создавать массив в результате
прохождения одного массива, вы должны использовать его array_walk
.array_map
также может принимать произвольное количество массивов, и он
может перебирать их параллельно, а array_walk
работает только на
одном.array_walk
может получить дополнительный произвольный параметр для
передачи обратного вызова. Это в основном не имеет значения с PHP 5.3
(когда были введены анонимные функции ).array_map
имеет ту же длину, что и наибольший
входной массив; array_walk
не возвращает массив, но в то же время он
не может изменить количество элементов исходного массива;
array_filter
выбирает только подмножество элементов массива в
соответствии с функцией фильтрации. Он сохраняет ключи.Пример:
<pre>
<?php
$origarray1 = array(2.4, 2.6, 3.5);
$origarray2 = array(2.4, 2.6, 3.5);
print_r(array_map('floor', $origarray1)); // $origarray1 stays the same
// changes $origarray2
array_walk($origarray2, function (&$v, $k) { $v = floor($v); });
print_r($origarray2);
// this is a more proper use of array_walk
array_walk($origarray1, function ($v, $k) { echo "$k => $v", "\n"; });
// array_map accepts several arrays
print_r(
array_map(function ($a, $b) { return $a * $b; }, $origarray1, $origarray2)
);
// select only elements that are > 2.5
print_r(
array_filter($origarray1, function ($a) { return $a > 2.5; })
);
?>
</pre>
Результат:
Array
(
[0] => 2
[1] => 2
[2] => 3
)
Array
(
[0] => 2
[1] => 2
[2] => 3
)
0 => 2.4
1 => 2.6
2 => 3.5
Array
(
[0] => 4.8
[1] => 5.2
[2] => 10.5
)
Array
(
[1] => 2.6
[2] => 3.5
)
Источник
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть идея написать небольшой поисковик под свои задачи, сделал ряд парсеров для анализа нужных мне сайтов, но их очень быстро банятВозник...
Подскажите пожалуйста, не могу настроить пагинацию на сайтеСайт самописный, настроил вывод по нужному количеству постов (по 5, а всего их 15) на странице...
Где ошибка в коде? Не выводит nice на странице + не удаляет данные из таблицыКод: