Массивы в PHP: с чего начать новичку
За полчаса разберётесь, как создавать индексные и ассоциативные массивы в PHP, перебирать их и не спотыкаться о частые ошибки новичка.

К концу этого гайда вы научитесь создавать массивы двух видов, добавлять и удалять элементы, перебирать их в цикле и проверять, есть ли внутри нужный ключ. Времени уйдёт около 30–40 минут, если сразу проверять каждый пример в браузере или консоли. Всё, что ниже, работает на PHP 8.x — актуальной ветке языка на конец 2024 года.
Массив в PHP — это упорядоченная карта: набор пар «ключ — значение». Одна структура умеет работать и как обычный список (нумерованный с нуля), и как словарь (ключом служит строка). Именно на массивах держится почти всё: данные из формы, строки из базы, конфиги. Разберётесь с ними — станет понятна половина чужого кода.
Что нужно до начала
- PHP 8.0 или новее. Проверьте версию командой
php -vв терминале. Синтаксис[]для массивов работает начиная с PHP 5.4, так что если у вас 7.x — примеры тоже пойдут, но лучше ставить свежую версию. - Где запускать. Хватит одного файла
test.phpи командыphp test.phpв терминале. Либо локальный сервер (OpenServer, XAMPP, встроенныйphp -S localhost:8000) и открытая страница в браузере. - Текстовый редактор с подсветкой PHP: VS Code, PhpStorm или любой другой.
Если php -v выдаёт ошибку «команда не найдена» — PHP не установлен или не прописан в PATH. Без работающего интерпретатора дальше двигаться нет смысла.
Шаг 1. Создаём индексный массив
Индексный массив — это список, где ключами служат числа, начиная с нуля. PHP расставляет их сам.
<?php
// Список городов
$cities = ['Москва', 'Казань', 'Новосибирск'];
// Выводим второй элемент — индексы начинаются с нуля
echo $cities[1]; // Казань
Проверка: запустите php test.php — в терминале появится строка Казань. Если вместо этого пусто, вы, скорее всего, обратились к $cities[0] или $cities[3].
Шаг 2. Создаём ассоциативный массив
Здесь ключ вы задаёте сами — обычно это строка. Такой массив удобен, когда у значения есть понятное имя.
<?php
// Данные одного пользователя
$user = [
'name' => 'Ирина',
'age' => 34,
'email' => 'irina@example.com',
];
echo $user['name']; // Ирина
Проверка: вывод — Ирина. Стрелка => связывает ключ слева со значением справа. Запятая после последнего элемента разрешена и ошибкой не считается.
Шаг 3. Добавляем и удаляем элементы
Чтобы дописать элемент в конец индексного массива, используйте пустые квадратные скобки — PHP сам подберёт следующий числовой ключ.
<?php
$cities = ['Москва', 'Казань'];
$cities[] = 'Сочи'; // добавили в конец, ключ станет 2
$user = ['name' => 'Ирина'];
$user['age'] = 34; // добавили новый ключ в ассоциативный массив
unset($cities[0]); // удалили 'Москва'
print_r($cities);
Проверка: print_r покажет структуру массива. После unset ключ 0 исчезнет, а ключи 1 и 2 останутся как есть — PHP их не перенумеровывает. Это частая ловушка, о ней ниже.
Массив в PHP — не «список» и не «словарь» по отдельности, а одна гибкая структура, которая ведёт себя как оба сразу. Пока вы это держите в голове, чужой код читается проще.
Шаг 4. Перебираем массив в цикле
Основной инструмент — foreach. Он проходит по всем элементам, не заставляя вас считать индексы.
<?php
$user = [
'name' => 'Ирина',
'age' => 34,
'email' => 'irina@example.com',
];
// Только значения
foreach ($user as $value) {
echo $value . "\n";
}
// Ключ и значение вместе
foreach ($user as $key => $value) {
echo "$key: $value\n";
}
Проверка: второй цикл выведет три строки вида name: Ирина, age: 34, email: irina@example.com. Если строки склеились в одну — вы забыли перенос \n (в двойных кавычках, в одинарных он не работает).
Шаг 5. Проверяем ключи и значения
Перед тем как обратиться к элементу, полезно убедиться, что он существует. Иначе на несуществующем ключе PHP выдаст предупреждение.
<?php
$user = ['name' => 'Ирина', 'age' => 34];
// Есть ли такой ключ
if (array_key_exists('email', $user)) {
echo $user['email'];
} else {
echo 'Email не указан';
}
// Есть ли такое значение
if (in_array('Ирина', $user, true)) {
echo 'Имя найдено';
}
// Сколько элементов в массиве
echo count($user); // 2
Проверка: первый блок выведет Email не указан, потому что ключа email в массиве нет. Третий параметр true в in_array включает строгое сравнение — значение и тип должны совпадать.
Полезные функции на первое время
| Функция | Что делает |
|---|---|
count($arr) | Число элементов |
array_keys($arr) | Массив только из ключей |
array_values($arr) | Массив только из значений, ключи переустановлены с нуля |
array_key_exists($k, $arr) | Проверка наличия ключа |
in_array($v, $arr, true) | Проверка наличия значения (строго) |
sort($arr) | Сортирует по значениям, сбрасывает ключи |
implode(', ', $arr) | Склеивает элементы в строку через разделитель |
Если не получилось
- Warning: Undefined array key "email" — вы обратились к ключу, которого в массиве нет. Проверьте написание ключа (регистр важен:
Nameиname— разные ключи) или используйтеarray_key_existsперед обращением. - Warning: Undefined variable $cities — переменная массива не объявлена до того места, где вы к ней обращаетесь. Убедитесь, что строка с
$cities = [...]идёт выше. - После
unsetключи «дырявые». Удалили$cities[0], а элементы 1 и 2 остались с прежними номерами. Если нужна сплошная нумерация с нуля — пропустите массив черезarray_values($cities). - Parse error: syntax error рядом со строкой с массивом — чаще всего забытая запятая между элементами или незакрытая скобка
]. Проверьте строку из сообщения и одну выше. - Array to string conversion при
echo $arr— массив нельзя вывести черезechoнапрямую. Для отладки беритеprint_r($arr)илиvar_dump($arr), для склейки в строку —implode.
Что дальше
Вы умеете создавать оба типа массивов, менять их и перебирать — этого хватит, чтобы читать данные из формы ($_POST — это тоже массив) и обрабатывать выборки из базы. Следующие темы, к которым стоит перейти:
- Многомерные массивы — массив внутри массива, так хранят список пользователей, где каждый сам ассоциативный массив.
- Функции
array_mapиarray_filter— преобразование и отбор элементов без ручногоforeach. - Сортировки —
usort,asort,ksortдля разных сценариев. Инвалидация ключей при сортировке — отдельная тема, здесь мы её не разбирали.
Держите под рукой раздел о массивах в официальной документации PHP: там перечислены все функции с примерами, и это лучший справочник на первое время.
Источники: PHP Manual — Arrays, PHP Manual — Array Functions
Частые вопросы
У меня PHP 7.4, а не 8.x — примеры сработают?
Чем ассоциативный массив отличается от индексного?
Почему после unset нумерация ключей становится дырявой?
Как вывести массив на экран целиком, чтобы посмотреть содержимое?
В чём разница между == и === при сравнении значений в массиве?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.