Фильтрация массива в PHP
Часто бывает нужно извлечь из массива чётные по значению, положительные или ещё какие-то элементы и сформировать из них новый массив. Иметь для каждого такого конкретного случая отдельную стандартную функцию было бы странно даже для PHP, раз есть достаточно универсальная стандартная функция array_filter.
Извлечём с её помощью чётные (по значению) элементы массива:
<?php $array = array (1,2,3,4,5); $filteredarray = array_filter ($array, function ($item) { return !($item%2); }); print_r ($filteredarray); ?>Обратите внимание на второй параметр вызова
array_filter
- это безымянная функция, параметр которой обозначен $item
, она автоматически вызовется для каждого из элементов исходного массива $array
. Выражение !($item%2)
, возвращаемое функцией, - то же самое, что $item%2==0
, то есть, проверка того, что остаток от деления $item
на 2 равен нулю, $item
является чётным значением. Такие элементы, для которых callback-функция даёт результат, не равный нулю (false
), помещаются в выходной массив $filteredarray
.
Встраивать безымянную функцию внутрь вызова метода array_filter
необязательно, можно было и так:
<?php function filter ($item) { return !($item&1); } $array = array (1,2,3,4,5); $filteredarray = array_filter ($array, 'filter'); print_r ($filteredarray); ?>
- здесь, кроме того, проверка чётности сделана побитовым "и" с единицей, что должно быть быстрее, чем остатком от деления :)
Надо учитывать, что встроенная (callback) функция не должна менять элементы массива, иначе поведение фильтра станет непредсказуемым.
15.04.2013, 11:44 [11834 просмотра]