0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Следующая операция называется<strong>фильтрация</strong>. В PHP она выполняется с помощью функции array_filter, а в других языках ее называют просто filter или select.</p>
1
<p>Следующая операция называется<strong>фильтрация</strong>. В PHP она выполняется с помощью функции array_filter, а в других языках ее называют просто filter или select.</p>
2
<p>Понятие "фильтрация" интуитивно понятно каждому человеку. Мы пьем фильтрованную воду и фильтруем то, что говорим. В программировании практически то же самое. Фильтрация по отношению к коллекции означает, что мы отбираем из нее только те элементы, которые удовлетворяют условию.</p>
2
<p>Понятие "фильтрация" интуитивно понятно каждому человеку. Мы пьем фильтрованную воду и фильтруем то, что говорим. В программировании практически то же самое. Фильтрация по отношению к коллекции означает, что мы отбираем из нее только те элементы, которые удовлетворяют условию.</p>
3
<p>Возьмем наших многострадальных пользователей и выберем тех, кто старше 10 лет:</p>
3
<p>Возьмем наших многострадальных пользователей и выберем тех, кто старше 10 лет:</p>
4
<p>Фильтрация встречается так же часто, как отображение, а возможно и чаще. Общая схема кода при фильтрации практически такая же, как и в отображении. Отличается только пара ключевых моментов:</p>
4
<p>Фильтрация встречается так же часто, как отображение, а возможно и чаще. Общая схема кода при фильтрации практически такая же, как и в отображении. Отличается только пара ключевых моментов:</p>
5
<ul><li>Фильтрация возвращает коллекцию либо того же размера (если ничего не было отфильтровано), либо меньшего. Она может вернуть даже пустую коллекцию, если ни один из элементов не подошел</li>
5
<ul><li>Фильтрация возвращает коллекцию либо того же размера (если ничего не было отфильтровано), либо меньшего. Она может вернуть даже пустую коллекцию, если ни один из элементов не подошел</li>
6
<li>Фильтрация всегда возвращает исходные элементы. Она никогда не делает отображение. Если на вход фильтрации поступил список пользователей, то список пользователей будет и на выходе</li>
6
<li>Фильтрация всегда возвращает исходные элементы. Она никогда не делает отображение. Если на вход фильтрации поступил список пользователей, то список пользователей будет и на выходе</li>
7
</ul><p>Теперь посмотрим, как выглядит фильтрация при использовании функции высшего порядка array_filter:</p>
7
</ul><p>Теперь посмотрим, как выглядит фильтрация при использовании функции высшего порядка array_filter:</p>
8
<p>В отличие от array_map, переданная в array_filter функция должна быть предикатом. Другими словами, она должна вернуть true или false для каждого элемента коллекции. Значение, которое возвращается никак не используется. Оно всего лишь говорит о том, стоит ли включать текущий элемент в итоговый массив. Новички часто делают ошибку на этом этапе и начинают возвращать из фильтра то, что они бы хотели увидеть в результирующем массиве. На самом деле, для этого надо применять array_map.</p>
8
<p>В отличие от array_map, переданная в array_filter функция должна быть предикатом. Другими словами, она должна вернуть true или false для каждого элемента коллекции. Значение, которое возвращается никак не используется. Оно всего лишь говорит о том, стоит ли включать текущий элемент в итоговый массив. Новички часто делают ошибку на этом этапе и начинают возвращать из фильтра то, что они бы хотели увидеть в результирующем массиве. На самом деле, для этого надо применять array_map.</p>
9
<p>Перейдем к реализации:</p>
9
<p>Перейдем к реализации:</p>
10
<p>Обратите внимание, что array_filter сохраняет ключи. При работе с индексированными массивами такое поведение нежелательно, поэтому придется использовать функцию array_values для сброса порядка.</p>
10
<p>Обратите внимание, что array_filter сохраняет ключи. При работе с индексированными массивами такое поведение нежелательно, поэтому придется использовать функцию array_values для сброса порядка.</p>