Методы array_filter(), array_map() и array_reduce() в PHP с примерами
Для более удобной работы с массивами в языке PHP есть немало функций. Они делают быстрее и в одну строку то, для чего бы пришлось писать иногда множество строк – то есть фактически реализуют за программиста часто употребляемые шаблоны (паттерны, образцы, порядок действий) программирования. Давайте сегодня рассмотрим три таких метода: array_filter(), array_map() и array_reduce().
Метод array_filter()
Как можно догадаться по названию, этот метод фильтрует массив элементов, применяя callback-функцию. Вот, например, нам надо в имеющемся массиве целых чисел оставить только те, которые больше девятки. С помощью array_filter() это можно сделать так:
function moreThanNine($var) { if ($var > 9){ return $var; } } $upArr = array(2, 6, 11, 44); print_r(array_filter($upArr, "moreThanNine"));Получается так:
Обратите внимание, что ключи массива сохраняются. Добавлять или удалять с помощью колбека элемент лучше не надо – результат будет непредсказуем. С версии 5.6 добавилась пара констант, которые можно использовать третьим параметром - ARRAY_FILTER_USE_KEY и ARRAY_FILTER_USE_BOTH – по названию думаю вы тоже все понимаете.
Метод array_map()
Очень похожая функция, но в результате после прохода каждого элемента возвращает массив (или массивы) с таким же числом элементов. Обработанных колбэк фунцией.
Функция array_map позволяет применять функцию обратного вызова для преобразования элементов массива. Это действительно полезно, когда вы хотите выполнить определенную операцию над каждым элементом массива. Кроме того, он также позволяет объединять несколько массивов в один многомерный массив.
Вместо того, чтобы перебирать все элементы массива с помощью конструкции foreach для выполнения определенной операции над ними, вам следует предпочесть функцию array_map, которая создана специально для этого.
Например, с помощь. Этого метода можно все элементы массивы перевести в нижний регистр, а первый символ в верхний:
function myTemplateStr($el) { return ucfirst(strtolower($el)); } $upArr = ['whY', 'ME', 'lemon']; $results = array_map('myTemplateStr', $upArr); print_r($results);
В синтаксисе функции array_map вы можете передать значение null в качестве первого аргумента вместо вызываемого.
$names = ['job', 'personal']; $emails = ['admin@upread.ru', 'up777up@yandex.ru']; $results = array_map(null, $names, $emails); print_r($results);
Поскольку мы передали значение null в первом аргументе, он выполняет операцию объединения для всех массивов, которые передаются со второго аргумента и далее. В нашем случае мы передали два массива, и функция array_map объединяет их в один многомерный массив.
Функция array_reduce() PHP
Эта встроенная функция PHP применяется для сведения элементов массива к одному значению, которое может быть значением с плавающей точкой, целым числом или строкой. Функция использует определяемую пользователем функцию обратного вызова для уменьшения входного массива.
Синтаксис:
array_reduce($array, own_function, $initial)Функция принимает три аргумента:
- $array (обязательный): Это обязательный параметр и относится к исходному массиву, который нам нужно уменьшить.
- own_function (обязательная): Этот параметр также является обязательным и относится к определяемой пользователем функции, которая используется для хранения значения массива
- $initial (необязательно): Этот параметр является необязательным и относится к значению, которое должно быть отправлено функции.
function own_function($element1, $element2) { return $element1 . ", " . $element2; } $array = array(45, 22, 456, 879); print_r(array_reduce($array, "own_function", 333));В итоге мы получим:
333, 45, 22, 456, 879
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.