Массивы в PHP

Массив — это упорядоченный набор значений под одним именем. Вместо десяти переменных $user1, $user2, $user3… достаточно одного массива $users. В PHP массивы особенно гибкие: они умеют работать и как списки, и как «словари» с ключами.

Создание массива

Современный синтаксис — квадратные скобки (старый array() тоже работает, но скобки короче):

<?php
$fruits = ["яблоко", "банан", "вишня"];

print_r($fruits);
// Вывод: Array ( [0] => яблоко [1] => банан [2] => вишня )

Каждый элемент получает числовой индекс, отсчёт начинается с нуля. Обращение к элементу — по индексу в квадратных скобках:

<?php
$fruits = ["яблоко", "банан", "вишня"];

echo $fruits[0]; // Вывод: яблоко
echo $fruits[2]; // Вывод: вишня

$fruits[1] = "груша"; // заменяем элемент
echo $fruits[1]; // Вывод: груша

Добавление и удаление элементов

<?php
$fruits = ["яблоко"];

$fruits[] = "банан";              // добавить в конец
array_push($fruits, "вишня");     // то же самое функцией
array_unshift($fruits, "лимон");  // добавить в начало

print_r($fruits);
// Вывод: Array ( [0] => лимон [1] => яблоко [2] => банан [3] => вишня )

array_pop($fruits);   // удалить последний
array_shift($fruits); // удалить первый

print_r($fruits);
// Вывод: Array ( [0] => яблоко [1] => банан )

Ассоциативные массивы

Вместо чисел ключами могут быть строки — получается структура «ключ → значение», как анкета:

<?php
$user = [
    "name" => "Анна",
    "age" => 25,
    "city" => "Москва",
];

echo $user["name"]; // Вывод: Анна
echo $user["city"]; // Вывод: Москва

$user["email"] = "[email protected]"; // добавить новый ключ

Ассоциативные массивы — рабочая лошадка PHP: в таком виде приходят данные форм, строки из базы данных и ответы API.

Многомерные массивы

Элементом массива может быть другой массив — так строят таблицы и вложенные структуры:

<?php
$students = [
    ["name" => "Иван", "score" => 90],
    ["name" => "Мария", "score" => 85],
];

echo $students[0]["name"];  // Вывод: Иван
echo $students[1]["score"]; // Вывод: 85

Перебор массива

Главный инструмент — цикл foreach, знакомый по прошлой статье:

<?php
$prices = ["хлеб" => 45, "молоко" => 80];

foreach ($prices as $product => $price) {
    echo "$product стоит $price руб.\n";
}
// Вывод:
// хлеб стоит 45 руб.
// молоко стоит 80 руб.

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

Размер, проверка, поиск

<?php
$nums = [3, 1, 4, 1, 5];

echo count($nums); // Вывод: 5

var_dump(in_array(4, $nums));       // Вывод: bool(true)
echo array_search(5, $nums);        // Вывод: 4 (индекс элемента)
var_dump(array_key_exists(0, $nums)); // Вывод: bool(true)

Сортировка

<?php
$nums = [3, 1, 4, 1, 5];

sort($nums);  // по возрастанию
print_r($nums); // Вывод: Array ( [0] => 1 [1] => 1 [2] => 3 [3] => 4 [4] => 5 )

rsort($nums); // по убыванию
print_r($nums); // Вывод: Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 1 [4] => 1 )

Для ассоциативных массивов есть asort() (по значениям, ключи сохраняются) и ksort() (по ключам).

map и filter

Две функции в стиле функционального программирования. array_map() применяет функцию к каждому элементу, array_filter() оставляет только подходящие. Со стрелочными функциями PHP 8 это выглядит очень компактно:

<?php
$prices = [100, 250, 400];

$withTax = array_map(fn($p) => $p * 1.2, $prices);
print_r($withTax);
// Вывод: Array ( [0] => 120 [1] => 300 [2] => 480 )

$expensive = array_filter($prices, fn($p) => $p > 200);
print_r($expensive);
// Вывод: Array ( [1] => 250 [2] => 400 )

Сумма и другие агрегаты

<?php
$nums = [10, 20, 30];

echo array_sum($nums); // Вывод: 60
echo max($nums);       // Вывод: 30
echo min($nums);       // Вывод: 10

Сводная таблица

ФункцияЧто делает
count()количество элементов
in_array()есть ли значение в массиве
array_push() / array_pop()добавить / удалить с конца
sort() / rsort()сортировка по возрастанию / убыванию
array_map()преобразовать каждый элемент
array_filter()отобрать элементы по условию
array_sum()сумма элементов

Что мы узнали

  • Массив создаётся квадратными скобками: $arr = [1, 2, 3], индексация с нуля.
  • Ассоциативные массивы хранят пары «ключ → значение» и используются в PHP повсюду.
  • Массивы могут быть вложенными — так описывают таблицы и сложные структуры.
  • foreach — основной способ перебора.
  • array_map() и array_filter() со стрелочными функциями fn() => заменяют рутинные циклы.
Проверьте себя
1. Как добавить элемент в конец массива `$fruits` в PHP?
A$fruits.add("банан")
B$fruits[] = "банан"
Cappend($fruits, "банан")
D$fruits->push("банан")
2. Что такое ассоциативный массив в PHP?
AМассив, отсортированный по значениям
BМассив, в котором ключами служат строки, а не числа
CМногомерный массив с вложенными массивами
DМассив только с числовыми значениями
3. Что выведет `echo $students[1]["score"];` для массива `[['name'=>'Иван','score'=>90], ['name'=>'Мария','score'=>85]]`?
A90
B85
CМария
DИван
4. Какая функция удаляет последний элемент массива в PHP?
Aarray_shift()
Bunset()
Carray_pop()
Darray_splice()

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект