Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Работа с массивами в PHP: правильный путь

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Stanislav Protasevich (you can also view the original English article)

В этом уроке мы рассмотрим практические примеры работы с рядом PHP-шных функций для работы с массивами. Этот материал пригодится каждому PHP разработчику: позволит писать компактный и читабельный код.

Все примеры можно будет скачать, кликнув на соответствующие ссылки и поделиться с коллегами.

Основы

Давайте начнём с простой функции, которая оперирует ключами и значениями элементов массивов. Одной из таких функций является array_combine(), которая создаёт новый массив из двух существующих: первый использует для создания ключей, второй в качестве значений:

В этом же разрезе вам могут пригодиться функции array_values(). Она извлекает из ассоциативного массива значения; array_keys() возвращает только ключи заданного массива; array_flip() меняет местами ключи и значения:

Сокращение кода

Функция list(), которая по сути является конструкцией языка, позволяет быстро присвоить значения массива ряду переменных. Простой пример работы с функцией list():

Данный приём блестяще вписывается в совместную работу с функциями preg_slit() или explode() . Извлекать можно только те значения, которые действительно нужны:

Также функцию list() можно поместить в foreach:

Чтобы извлечь значения из ассоциативного массива можно воспользоваться функцией extract(). В результате вы получите целый ряд переменных (имена которых совпадают с ключами массива):

При работе с функцией extract() следует быть осторожным, особенно во время взаимодействия с пользовательскими данными (результатами запросов), поэтому рекомендуется использовать флаги EXTR_IF_EXISTS и EXTR_PREFIX_ALL.

Чтобы сделать противоположное действие можно воспользоваться функцией compact(), которая сформирует массив из ряда переменных:

Функции фильтрации

Для фильтрации данных лучшим образом подойдёт функция array_filter(). В качестве параметров необходимо передать массив и анонимную функцию-обработчик.  Для того чтобы оставить элемент в массиве следует вернуть true, в обратном случае false:

Фильтрацию можно произвести и по ключам. Для этого следует воспользоваться третьим параметром, флагом ARRAY_FILTER_USE_KEY или ARRAY_FILTER_USE_BOTH.

Вдобавок к этому, можете вызвать array_filter() без аргументов. В результате из массива будут удалены все пустые значения:

Для того чтобы получить из массива только уникальные значения следует вызвать функцию array_unique(). Стоит отметить, что в результирующий массив войдут только первые найденные элементы:

Функция array_column() будет полезна если вам необходимо извлечь определённый столбец многомерного массива. Это может быть результат SQL запроса или данные из файла CSV. Вам следует указать массив и название колонки:

В PHP 7 функция array_column() получила небольшой апгрэйд: возможность взаимодействия с полями объекта. Это в значительной мере упрощает работу с массивами моделей:

Обход массивов

array_map() позволяет обойти все элементы массива и указать функцию обратного вызова. Вы можете передать как анонимку, так и название существующей функции. В результате получите массив с преобразованными значениями:

Существует устойчивое заблуждение, что в функцию обратного вызова нельзя одновременно передавать и ключи, и значения. Это не так:

Это не самая лучшая реализация. Давайте воспользуемся функцией array_walk(). Она похожа на array_map(), но работает чуть иначе.  Во-первых, исходные данные передаются по ссылке, в результате чего array_walk() обработает переданный массив, а не создаст новый. Таким образом мы сможем передать значения и ключи исходного массива по ссылке:

Объединение массивов

Вызов функции array_merge() — самый просто способ объединить несколько массивов. Все данные будут слиты воедино, повторяющиеся данные перезапишутся:

Для того чтобы удалить значения одного массива из другого массива воспользуйтесь функцией array_diff(). Обратная операция реализуется при помощи вызова array_intersect(). Примеры:

Математические операции

С помощью функции array_sum() можно посчитать сумму элементов массива; array_product() перемножит все значения; array_reduce() позволит применить свою собственную формулу:

Функция array_count_values() поможет посчитать количество всех уникальных значений массива:

Генерирование массивов

Для того чтобы сформировать массив из заданного количества элементов, и задать им единое значение следует воспользоваться функцией array_fill()

Чтобы получить массив, элементы которого должно варьировать в диапазоне часов или букв следует вызывать функцию range():

Чтобы обрезать массив — получить первые три элемента — достаточно вызвать функцию array_slice():

Сортировка массивов

Следует знать, что все PHP-шные функции сортировки работают с исходными массивами по ссылке и возвращают true в случае успеха и false при неудаче.  Функция sort() сортирует элементы массива в возрастающем порядке и присваивает новые ключи элементам массива. Разновидности сортировки в зависимости от префиксной буквы:

  • a, сортировка, сохраняющая отношения между ключами и значениями
  • k, сортировка по ключам
  • r, сортировка в прямом/обратном порядке
  • u, сортировка при помощи пользовательской функции

Доступны комбинации видов сортировки:

a k r u
a asort
arsort uasort
k ksort krsort
r arsort krsort rsort
u uasort
usort

Работаем с массивами как профи

Поистине крутые вещи начинают происходить, когда мы комбинируем несколько вышеупомянутых функций. К примеру мы можем убрать из массива все пустые значения, вызвав array_filter() и array_map():

Чтобы получить идентификаторы и названия объектов моделей достаточно вызывать array_combine() и array_column():

Подсчёт трёх самых часто используемых элемента массива можно осуществить вызовом array_count_values(), arsort() и array_slice():

Комбинация функций array_sum() и array_map() позволит с лёгкостью подсчитать сумму товаров в корзине:

Заключение

Данный урок — лишний повод убедиться в том, что знание элементарных функций поможет сделать ваш код более ёмким и читабельным. Конечно же это далеко не весь список функций для работы с массивами, которые есть в PHP. Ещё больше возможностей открываются в случае использования специальных параметров и флагов. В этом уроке мы рассмотрели основы основ, о которых должен знать каждый PHP разработчик.

Все примеры, приведённые в этом уроке доступны в виде презентации. Ссылка в дополнительных материалах.

Не стесняйтесь задавать вопросы в разделе комментариев.

Дополнительные материалы

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.