Полезные функции для работы с массивами в PHP

Функции php для работы с массивамиДавно я не писал в бложек. Работа и учеба не дают покоя. Последнее время получаю много заказов на PHP, и частенько приходится работать с массивами данных. Знания мои в PHP не изумительные, поэтому постоянно лезу в документацию. Сегодня пришла в голову мысль — написать себе мини-шпаргалку с полезными функциями для работы с массивами в PHP. Думаю, эта шпаргалка пригодится не только мне.

Самая часто используемая функция на мой взгляд — это count(«массив»). Функция count возвращает количество элементов в массиве. Пример работы:

На самом деле, функция count может работать не только с массивами, но и с обыкновенными переменными, а так же с многомерными массивами. Приведу еще парочку примеров:

Если кто не понял, почему count($myArr, COUNT_RECURSIVE) возвращает 8 — объясняю. Массив $myArr состоит из 3-х элементов (два массива и одно число). Первый элемент массива $myArr — это массив из 3 элементов. Значит всего элементов уже 6. Прибавляем сюда еще два элемента из второго массива и получаем 8.

Идем дальше. Следующая полезная функция — in_array(«искомое значение», «массив», [«совпадение по типу»]). Функция in_array ищет элемент по искомому значению в переданном ей массиве. Если находит — возвращает TRUE, в противном случае FALSE. Третий аргумент отвечает за необходимость совпадения по типу. Если он установлен в TRUE — значит, искомое значение должно совпадать не только по значению, но и по типу. Кроме того, сравнение строк — чувствительно к регистру. Примеры:

Двигаемся дальше. Функция array_search(«искомое значение», «массив», [«совпадение по типу»]) аналогична предыдущей, только в случае успеха — возвращает значение ключа массива. Примеры:

Ничего сложного. Следующей гости нашей статьи это array_values(«массив») и array_keys(«массив»). Не трудно догадаться, как они работают. Функция array_values возвращает новый массив, содержащий все значение переданного ей массива, а array_keys — ключи, переданного ей массива. Примеры:

Результат выполнения:

Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => A [1] => B [2] => C ).

Идем дальше. Функции сортировки массивов. Первой рассмотрим sort(«массив», [«флаги»]). Сортирует массив по возрастанию, или по алфавиту, если это строка. В качестве дополнительных флагов можно задать следующие параметры: SORT_REGULAR (обычное сравнение элементов), SORT_NUMERIC (числовое сравнение элементов), SORT_STRING (строковое сравнение элементов). Подробнее можно прочитать в официальной документации, по вот этой ссылке. Примеры использования функции:

Результат работы:

Array ( [0] => 10 [1] => 1 [2] => 12 [3] => 13 [4] => 2 [5] => 3 [6] => 11 [7] => 100 )
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 10 [4] => 11 [5] => 12 [6] => 13 [7] => 100 )
Array ( [0] => 1 [1] => 10 [2] => 100 [3] => 11 [4] => 12 [5] => 13 [6] => 2 [7] => 3 )

Все просто, не так ли? Есть аналогичная функция, но сортирует она в обратном порядке — rsort(«массив», [«флаги»]). А так же еще две функции, выполняющие аналогичные действия, но при этом они сохраняют значения ключей. Это asort(«массив», [«флаги»]) — простая сортировка с сохранением ключей и arsort(«массив», [«флаги»]) — сортировка в обратном порядке, с сохранением ключей. Аналогичный пример работы функций asort и arsort:

Результат работы немного другой:

Array ( [0] => 10 [1] => 1 [2] => 12 [3] => 13 [4] => 2 [5] => 3 [6] => 11 [7] => 100 )
Array ( [1] => 1 [4] => 2 [5] => 3 [0] => 10 [6] => 11 [2] => 12 [3] => 13 [7] => 100 )
Array ( [7] => 100 [3] => 13 [2] => 12 [6] => 11 [0] => 10 [5] => 3 [4] => 2 [1] => 1 )

Обратите внимание, что в этом примере я не использовал флаг SORT_STRING. Кроме этих функций, существует возможность сортировка массива по ключам. Для этого есть функции ksort(«массив», [«флаги»]) и krsort(«массив», [«флаги»]), которые работают аналогично, поэтому обойдемся без примера :).

А что если я хочу отсортировать массив каким-либо своим способом? В этом мне могут помочь функции usort(«массив», «функция») и uksort(«массив», «функция»), которые выполняют сортировку в соответствии пользовательской функции сравнения элементов. То есть, программист должен описать функцию, которая будет сравнивать элементы массива по очереди, а сами usort или uksort будут располагать элементы в массиве, в зависимости от результатов сравнения. Пример немного посложнее. Сначала объясню устройство массива. Он будет состоять из массивов, содержащих строку и число. Например, вот такой:

Теперь поменяем элементы местами и отсортируем его по первому элементу внутренних массивов. Код:

Результат работы программы:

Array ( [0] => Array ( [0] => 1 [1] => String1 ) [1] => Array ( [0] => 2 [1] => String2 ) [2] => Array ( [0] => 3 [1] => String3 ) )

Как видите ничего сложного. Массив сортируется по первому элементу внутреннего массива. Функция сравнения может возвращать 3 значения. Если «положительное» — значит, функция сортировка считает, что первый элемент больше второго, если «отрицательное» — значит наоборот и если «0» — значит, элементы равны. Функция ursort работает также, только сортирует в обратном порядке. Кстати, можно отсортировать по убыванию, используя usort, просто задав правильную функцию сравнения для этого случая.

Дальше нас ждет array_walk(«массив», «функция», [«дополнительный аргумент»]). Эта функция пробегается по массиву, передавая пару значения и ключа в пользовательскую функцию. Дополнительный аргумент, если он задан, передастся в качестве третьего в пользовательскую функцию. Если ошибок во время работы не возникло — вернет TRUE, иначе — FALSE. Рассмотрим пример, что бы было понятнее:

Результатом будет:

A is Ivan

B is John

C is Bob

Прошу заметить. Что бы можно было изменять элементы массива, нужно передавать их по ссылке. Например, вот таким вот образом:

Такое описание функции позволит изменять значение массивов (в данном случае присваивать им значение ключа).

Следующая функция вытаскивает под массив из массива. Синтаксис прост array_slice(«массив», «номер элемента», [«длина»]). С аргументами, думаю все понятно: из заданного массива извлекается новый массив с аргумента «номер элемента» до конца массива, если не задан аргумент «длина». Приведу пример:

Результат работы:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => 4 [1] => 5 )
Array ( [0] => 3 [1] => 4 [2] => 5 )

Есть еще одна аналогичная функция array_chunk(«массив», «размер», [«сохранять ключи»]). Данная функция возвращает многомерный массив, состоящий из полученных массивов заданного размера. Если задан булевый флаг «сохранять ключи» полученные значения массивов будут с теми ключами, которые у них были изначально, если нет — все значения получаю обыкновенные цифровые ключи. Пример работы:

Результат работы:

Array ( [0] => Array ( [A] => 1 [B] => 2 ) [1] => Array ( [C] => 3 [D] => 4 ) [2] => Array ( [E] => 5 [F] => 7 ) [3] => Array ( [G] => 8 ) )

Вот и все. Задавайте свои ответы, пишите отзывы и комментарии. Надеюсь, статья будет кому-то полезной.

Комментарии 4

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *