Не могу понять какая разница между 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
)
Источник
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
У меня есть идея написать небольшой поисковик под свои задачи, сделал ряд парсеров для анализа нужных мне сайтов, но их очень быстро банятВозник...
Подскажите пожалуйста, не могу настроить пагинацию на сайтеСайт самописный, настроил вывод по нужному количеству постов (по 5, а всего их 15) на странице...
Где ошибка в коде? Не выводит nice на странице + не удаляет данные из таблицыКод: