0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Первая функция из золотой тройки называется map. Ее название переводится на русский как<strong>отображение</strong>, что точно отражает суть этой операции. Если в программировании говорят об отображении, то всегда подразумевают функцию map. Ее можно найти практически в любом языке, и везде это будет одна и та же операция.</p>
1
<p>Первая функция из золотой тройки называется map. Ее название переводится на русский как<strong>отображение</strong>, что точно отражает суть этой операции. Если в программировании говорят об отображении, то всегда подразумевают функцию map. Ее можно найти практически в любом языке, и везде это будет одна и та же операция.</p>
2
<p>В PHP она имеет немного другое название -<a>array_map</a>.</p>
2
<p>В PHP она имеет немного другое название -<a>array_map</a>.</p>
3
<p>Попробуем прийти к этой функции через примеры. Возьмем список пользователей из предыдущего урока и извлечем из него имена всех пользователей:</p>
3
<p>Попробуем прийти к этой функции через примеры. Возьмем список пользователей из предыдущего урока и извлечем из него имена всех пользователей:</p>
4
<p>Здесь мы видим обычную агрегацию с использованием foreach.</p>
4
<p>Здесь мы видим обычную агрегацию с использованием foreach.</p>
5
<p>В некоторых ситуациях можно использовать функцию array_column, которая возвращает массив значений по ключу.</p>
5
<p>В некоторых ситуациях можно использовать функцию array_column, которая возвращает массив значений по ключу.</p>
6
<p>А что если мы захотим извлечь возраст? Повторяем:</p>
6
<p>А что если мы захотим извлечь возраст? Повторяем:</p>
7
<p>В примерах выше легко увидеть закономерность. Программа выполняет один и тот же проход по циклу и собирает результат в переменную $result. Единственное, что меняется - значение, которое мы извлекаем из элементов исходного массива. Именно этот паттерн называется отображением.</p>
7
<p>В примерах выше легко увидеть закономерность. Программа выполняет один и тот же проход по циклу и собирает результат в переменную $result. Единственное, что меняется - значение, которое мы извлекаем из элементов исходного массива. Именно этот паттерн называется отображением.</p>
8
<p>Теперь посмотрим, как выполнить ту же самую операцию с помощью array_map:</p>
8
<p>Теперь посмотрим, как выполнить ту же самую операцию с помощью array_map:</p>
9
<p>Функция array_map принимает два параметра:</p>
9
<p>Функция array_map принимает два параметра:</p>
10
<ul><li>Колбэк-функцию</li>
10
<ul><li>Колбэк-функцию</li>
11
<li>Коллекцию, которая будет отображаться</li>
11
<li>Коллекцию, которая будет отображаться</li>
12
</ul><p>Дальше внутри себя array_map делает перебор элементов переданной коллекции и для каждого элемента вызывает колбэк-функцию. На вход этой функции передается элемент исходного массива, а ее результат записывается в новый массив, который и возвращается наружу.</p>
12
</ul><p>Дальше внутри себя array_map делает перебор элементов переданной коллекции и для каждого элемента вызывает колбэк-функцию. На вход этой функции передается элемент исходного массива, а ее результат записывается в новый массив, который и возвращается наружу.</p>
13
<p>Проговорим несколько неочевидных моментов, связанных с array_map и операцией отображения:</p>
13
<p>Проговорим несколько неочевидных моментов, связанных с array_map и операцией отображения:</p>
14
<ul><li>Возвращаемый массив<strong>всегда</strong>такого же размера, как и исходный, потому что array_map отображает каждый элемент исходного массива в элемент возвращаемого</li>
14
<ul><li>Возвращаемый массив<strong>всегда</strong>такого же размера, как и исходный, потому что array_map отображает каждый элемент исходного массива в элемент возвращаемого</li>
15
<li>Внутри анонимной функции можно выполнять любые вычисления, а не только возвращать часть исходного элемента</li>
15
<li>Внутри анонимной функции можно выполнять любые вычисления, а не только возвращать часть исходного элемента</li>
16
<li>Функция array_map полностью скрывает от нас наличие обхода и процесс сборки нового массива</li>
16
<li>Функция array_map полностью скрывает от нас наличие обхода и процесс сборки нового массива</li>
17
</ul><p>Рассмотрим типичный пример, который любят приводить в документации функции map в разных языках программирования. Это применение некоторой арифметической операции к каждому элементу коллекции:</p>
17
</ul><p>Рассмотрим типичный пример, который любят приводить в документации функции map в разных языках программирования. Это применение некоторой арифметической операции к каждому элементу коллекции:</p>
18
<p>Пример выглядит искусственно, но хорошо отражает суть операции.</p>
18
<p>Пример выглядит искусственно, но хорошо отражает суть операции.</p>
19
<p>А теперь рассмотрим реализацию:</p>
19
<p>А теперь рассмотрим реализацию:</p>
20
<p>Перейдем к главному отличию myMap от ручного обхода массива. Дело в том, что функция myMap не знает, что нужно сделать с каждым элементом массива. Поэтому она принимает первым аргументом функцию, которую вызывает для каждого элемента исходного массива, а результат вызова записывается в выходной массив. Функция myMap не знает, чем будет этот результат - ей этого знать не нужно. Ответственность за обработку лежит на пользователях.</p>
20
<p>Перейдем к главному отличию myMap от ручного обхода массива. Дело в том, что функция myMap не знает, что нужно сделать с каждым элементом массива. Поэтому она принимает первым аргументом функцию, которую вызывает для каждого элемента исходного массива, а результат вызова записывается в выходной массив. Функция myMap не знает, чем будет этот результат - ей этого знать не нужно. Ответственность за обработку лежит на пользователях.</p>