- Работа с массивами в PHP
- Вывод содержимого массива
- Ассоциативные массивы
- Перебор массивов
- Функции для работы с массивами
- Сортировка
- Перемешивание элементов случайным образом
- Выстраивание элементов в обратном порядке
- Работа над массивами как с множествами значений
- Проверка наличия ключей и значений в массиве
- Сериализация
- Многомерные массивы
Работа с массивами в PHP
Массив – это тип данных для хранения упорядоченного набора элементов. Каждый элемент в массиве состоит из ключа и значения.
В PHP имеются только упорядоченные ассоциативные массивы. Индексированных массивов в PHP нет.
Но тем не менее в PHP мы можем создавать простые массивы. При указании значений без ключей, они будут им присваиваться автоматически.
Например, создадим массив, который будет содержать среднюю температуру каждого месяца в году:
Здесь мы создали массив $temperatures, содержащий 12 значений. Каждый элемент в этом массиве имеет ключ. Первый элемент имеет в качестве ключа число 0, второй – число 1, и так далее. Последний элемент имеет в качестве ключа число 11.
Другой вариант создания массивов – это использовать функцию array() :
Создание массива без элементов, то есть пустого массива, в PHP выполняется так:
Обращение к значению массива выполняется посредством ключа, который указывается в квадратных скобках:
В квадратных скобках при необходимости можно указывать выражение, результат вычисления которого будет использоваться в качестве ключа элемента, значение которого нужно получить:
Если мы попытаемся обратиться к элементу, которого нет в массиве, то начиная с PHP 8.0.0, мы получим сообщение об ошибке E_WARNING . При этом в качестве значение будет возвращено null .
Проверить наличия некоторого ключа в массиве можно с помощью функции array_key_exists :
Добавление в массив нового элемента или изменение существующего осуществляется в PHP так:
Здесь мы при добавлении нового элемента в массив не указали ему ключ. В этом случае ключ будет на единицу больше самого большого числового ключа в массиве.
Удаление элемента массива в PHP выполняется с помощью специальной языковой конструкции unset :
С помощью unset вы можете удалить не только отдельный элемент, но и полностью весь массив:
В PHP массиве могут содержаться данные различных типов:
Вывод содержимого массива
Вывести все значения массива на экран можно с помощью функции print_r :
Но чтобы этот вывод был более наглядным лучше это делать внутри тега :
Ассоциативные массивы
Создание ассоциативных массивов в PHP выполняется с указанием ключа. При этом в качестве ключа могут использоваться как числа, так и строки:
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese' ]; echo $languages['es']; // 'Spanish'
При этом в PHP выполняются следующие преобразования при сохранении ключей:
- строка ‘7’ будет преобразована в число 7 ; но например ключ ’07’ не будет преобразован, так как он не является корректным числом;
- число 7.5 , то есть число с плавающей точкой ( float ) будет преобразовано к целому числу, в данном случае к 7 ;
- true к 1 , а false к 0 ;
- значение null к пустой строке » .
'a', '095' => 'b', 9.5 => 'c', true => 'd', null => 'e', ]; echo $arr[95]; // a echo $arr['095']; // b echo $arr[9]; // c echo $arr[1]; // d echo $arr['']; // e
Если несколько элементов в объявлении массива используют одинаковый ключ, то последний перезапишет предыдущие:
'a', '0' => 'b', 0.7 => 'c', false => 'd', ]; echo '
'; print_r($array); echo '';
Так как в этом примере все ключи преобразуются к 0 , то каждый следующий элемент будет перезаписывать предыдущий и останется в массиве только один ключ со значением ‘d’ .
В одном массиве могут содержаться ключи различных типов, то есть одновременно int и string :
Перебор массивов
Наиболее удобный способ прохождения по массиву в PHP – это использовать конструкцию foreach :
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; /* $languages – массив, который нужно перебрать $key – значение ключа $value – значение, соответствующее ключу */ echo '
'; foreach ($languages as $key => $value) { echo "Ключ '$key' имеет значение '$value'
"; } echo '';
Если нужно только по значениям:
foreach ($languages as $value) { echo "$value
"; }Если ключи массива составляют последовательность, то перебрать такой массив можно с помощью for :
Здесь мы с помощью встроенной функции count() получить длину или другими словами размер массива. Узнать длину массива также можно с помощью sizeof() .
Функцию count также можно использовать для получения последнего элемента массива. Но это повторим только возможно если ключи массива составляют числовую последовательность, начинающуюся с 0 .
Функции для работы с массивами
В PHP очень много различных функций для работы с массивами. Рассмотрим некоторые из них.
Сортировка
Сортировка массива в порядке возрастания осуществляется с помощью функции sort , в порядке убывания посредством rsort .
Для настройки сортировки можно передать в качестве второго аргумента флаг.
Для того чтобы ключи сохранили значения, с которыми они связаны, сортировку массива необходимо выполнять с помощью функции asort . Функция asort сортирует в порядке возрастания, для сортировки в порядке убывания используйте arsort . Эти функции сортируют массив соответственно как sort и rsort , но ключи в отличие от них остаются связанными с такими же значениями.
Например, выведем с помощью ассоциативного массива $students имя студента и соответствующий полученный им балл в порядке их возрастания:
47, 'Bob' => 24, 'Tom' => 36, ]; asort($students); echo '
'; print_r($students); echo '';
Массивы в PHP можно сортировать не только по значениям, но и ключам. Для этого используется функция ksort . Для ассоциативного массива $students функция ksort выстроит все элементы в порядке возрастания названий ключей.
47, 'Bob' => 24, 'Tom' => 36, ]; ksort($students); // ['Bob' => 24, 'John' => 47, 'Tom' => 36]
Для сортировки в порядке убывания можно использовать krsort :
krsort($students); // ['Tom' => 36, 'John' => 47, 'Bob' => 24]
Перемешивание элементов случайным образом
Если вам нужно перемешать элементы в массиве случайным образом, то можно воспользоваться функцией shuffle :
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; shuffle($languages); // ['Portuguese', 'French', 'Spanish', 'English'] shuffle($languages); // ['English', 'French', 'Spanish', 'Portuguese']
При этом как вы видите, изначальные ключи теряются и массив превращается в индексируемый.
Выстраивание элементов в обратном порядке
Если вам необходимо создать новый массив, в котором элементы нужно выстроить в обратном порядке, то используйте array_reverse :
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; $languagesReverse = array_reverse($languages); echo '
'; print_r($languagesReverse); echo '';
Работа над массивами как с множествами значений
В PHP имеются функции: array_merge , array_intersect и array_diff . Они позволяют работать с массивами как с множествами значений.
1. Объединение одного или несколько массивов вместе выполняется в PHP с помощью функции array_merge :
array_merge(array . $arrays): array
Например, объединим с помощью array_merge элементы 3 массивов вместе:
'red', 1, 'php', 4]; $array2 = ['price' => 20.8, 1, 'color' => 'green', 3]; $array3 = ['green', 'price' => 30.5, 3, 'php']; $array = array_merge($array1, $array2, $array3); echo '
'; print_r($array); echo '';
Если массивы имеют одинаковые строковые ключи, то более позднее значение этого ключа перезапишет предыдущее. Например, значение ‘green’ ключа ‘color’ перезапишет ‘red’ .
Однако если массивы содержат числовые ключи, то более позднее значение не перезаписывает предыдущее, оно будет просто добавлено в массив. Значения с числовыми ключами в результирующем массиве будут перенумерованы последовательно начиная с нуля.
Функция array_merge , вызванная без аргументов возвращает пустой массив:
2. Функция array_intersect вычисляет пересечения значений основного массива со значениями других массивов:
// $base – основной массив // $arrays – другие массивы array_intersect(array $base, array . $arrays): array
В качестве результата оно возвращает массив со значениями основного массива, которые имеются во всех других массивах.
'red', 1, 'php', 4]; $array1 = ['price' => 20.8, 1, 'color' => 'red', 3]; $array2 = ['green', 'color' => 'red', 3, 'php', 1]; $result = array_intersect($base, $array1, $array2); // ['color' => red, 0 => 1]
3. Функция array_diff вычисляет разницу между массивами:
// $base – основной массив // $arrays – другие массивы array_diff(array $base, array . $arrays): array
В качестве результата оно возвращает массив со значениями основного массива, которых нет ни в одном из других массивов.
'red', 1, 'php', 4]; $array1 = [3, 'color' => 'red']; $array2 = [4, 'php']; $result = array_diff($base, $array1, $array2); // [0 => 1]
Проверка наличия ключей и значений в массиве
Проверить имеется ли указанное значение в массиве можно с помощью функции in_array :
if (in_array('apple', $fruits)) { // значение 'apple' имеется в массиве $fruits }
Здесь, в первый аргумент необходимо передать искомое значение, а во второй – сам массив. В качестве результата in_array возвращает true или false .
Кроме in_array в PHP имеется ещё функция array_search . Она выполняет тоже самое, но в отличие от in_array возвращает ключ этого значения.
Если нужно проверить наличие не значения, а ключа, то можно воспользоваться функцией array_key_exists :
if (array_key_exists('es', $languages)) { // ключ 'es' имеется в массиве $languages }
Сериализация
Сериализация в PHP – это очень мощный механизм, позволяющий легко преобразовать массив в строку, которая будет содержать ключи и значения в структурированном формате. Полученные строки затем можно сохранять в файлы и базу данных.
Сериализация массива в строку выполняется с помощью функции serialize . Для декодирования строки, содержащей сериализованный массив, обратно в исходный массив используется функция unserialize :
// исходный массив $person = [ 'name' => 'Alexander', 'age' => 23 ]; // сериализуем массив в строковое представление, уникальное для PHP $personString = serialize($person); // выведем на экран строку echo $personString; // 'a:2:{s:4:"name";s:9:"Alexander";s:3:"age";i:23;}' // преобразуем строку обратно в массив $personArray = unserialize($personString); // выведем на экран массив в форматированном виде echo '
'; print_r($personArray); // array('name' => Alexander, 'age' => 23) echo '';
Многомерные массивы
Многомерные массивы – это массивы, элементы которого просто содержат другие массивы.
Пример создания двумерного массива:
$software = [ 'os' => ['Windows', 'Linux', 'macOS'], 'browsers' => ['Firefox', 'Chrome', 'Safari', 'Edge'], 'code editors' => ['Visual Studio Code', 'Atom', 'Sublime Text'], ];
По сути двумерный массив – это массив массивов. Обращение к элементу массива в этом случае осуществляется с использованием двух квадратных скобок:
echo $software['os'][0]; // 'Windows' $software['browsers'][3] = 'Opera';
Выведем с помощью функции print_r массив $software в форматированном виде:
echo '
'; print_r($software); echo '';