
Массивы в PHP представляют собой структуры данных, способные хранить несколько значений под одним именем переменной. Для создания массива используют функции array() или синтаксис квадратных скобок []. Ассоциативные массивы позволяют связывать ключи с конкретными значениями, что упрощает доступ к данным по именованным индексам.
Добавление элементов в массив можно выполнять через присваивание нового значения по индексу или ключу: $array[] = $value; для числового индекса и $array[‘key’] = $value; для ассоциативного массива. Для удаления элементов применяются функции unset() и array_splice(), которые сохраняют структуру массива и корректируют индексы.
PHP предоставляет множество встроенных функций для работы с массивами: array_merge() объединяет несколько массивов, array_diff() позволяет находить различия, array_keys() возвращает все ключи массива. Для сортировки используются sort(), asort() и ksort(), каждая из которых оптимизирована для разных типов массивов и требований к ключам и значениям.
Для эффективной обработки массивов рекомендуется использовать циклы foreach и for, учитывая, что foreach обеспечивает более безопасный и читаемый доступ к элементам, особенно при работе с ассоциативными массивами. Также важно контролировать размер массивов и применять функции array_slice() или array_chunk() для работы с большими объемами данных.
Создание индексированных и ассоциативных массивов

Индексированные массивы в PHP создаются с использованием функции array() или короткого синтаксиса []. Ключи в таких массивах автоматически присваиваются начиная с 0, если не указаны явно.
Пример создания индексированного массива с использованием короткого синтаксиса:
$fruits = ["яблоко", "банан", "вишня"];
Можно назначать собственные числовые ключи для точного контроля индексации:
$fruits = [1 => "яблоко", 3 => "банан", 5 => "вишня"];
Ассоциативные массивы используют ключи в виде строк, что позволяет связывать данные с понятными идентификаторами. Ключи должны быть уникальными в пределах массива.
Пример создания ассоциативного массива:
$user = ["имя" => "Иван", "возраст" => 30, "город" => "Москва"];
Ассоциативные массивы удобно использовать для хранения конфигураций, данных из форм или JSON, так как доступ к элементам осуществляется через ключ:
Рекомендуется комбинировать индексированные и ассоциативные массивы для хранения сложных структур данных, например:
$users = [
["имя" => "Иван", "возраст" => 30],
["имя" => "Анна", "возраст" => 25]
];
Для добавления элементов в массив используйте оператор [] для индексированных массивов и прямое присвоение для ассоциативных:
$fruits[] = "апельсин";
$user["email"] = "ivan@example.com";
При работе с массивами важно поддерживать единообразие типов ключей и избегать пересечения числовых и строковых индексов, чтобы исключить неожиданные результаты при переборе данных.
Добавление и удаление элементов в массиве
Для добавления элементов в конец массива используется функция array_push(). Она позволяет добавить один или несколько элементов сразу. Пример:
$fruits = ['яблоко', 'банан'];
array_push($fruits, 'апельсин', 'груша');
Результат: ['яблоко', 'банан', 'апельсин', 'груша']
Альтернативно можно использовать синтаксис с квадратными скобками: $fruits[] = 'киви';. Это эффективно для добавления одного элемента.
Для добавления элемента в начало массива применяется array_unshift(). Она также поддерживает добавление нескольких элементов:
array_unshift($fruits, 'манго', 'ананас');
Результат: ['манго', 'ананас', 'яблоко', 'банан', 'апельсин', 'груша', 'киви']
Удаление элементов с конца массива выполняется функцией array_pop(). Она возвращает удалённое значение:
$last = array_pop($fruits);
Результат: $last = 'киви', массив без последнего элемента.
Удаление элементов с начала массива осуществляется с помощью array_shift():
$first = array_shift($fruits);
Результат: $first = 'манго', первый элемент удалён.
Для точечного удаления элементов по ключу используется функция unset(). Она не переписывает индексы автоматически:
unset($fruits[2]);
Массив после удаления: [0=>'ананас', 1=>'яблоко', 3=>'апельсин', 4=>'груша']
Для восстановления последовательных индексов после unset() применяется array_values():
$fruits = array_values($fruits);
Теперь массив имеет индексы 0, 1, 2, 3.
При работе с ассоциативными массивами unset() также эффективен для удаления элементов по ключу, а array_push() или квадратные скобки применяются только для числовых индексов.
Обход массивов с помощью foreach и for
В PHP массивы можно обходить двумя основными способами: с помощью цикла foreach и цикла for. Каждый метод имеет свои особенности и применяется в зависимости от структуры массива и задачи.
Использование foreach
Цикл foreach предназначен для простого и безопасного обхода массивов без необходимости контролировать индексы. Он подходит как для индексированных, так и для ассоциативных массивов.
- Синтаксис для индексированных массивов:
foreach ($array as $value) { ... } - Синтаксис для ассоциативных массивов:
foreach ($array as $key => $value) { ... } - Использование ссылки
&позволяет изменять элементы массива внутри цикла. - Рекомендуется использовать
foreach, если не требуется работать с индексами напрямую или модифицировать массив через индексы.
Пример обхода ассоциативного массива:
$users = ['alice' => 25, 'bob' => 30];
foreach ($users as $name => $age) {
echo "$name: $age лет\n";
}
Использование for

Цикл for подходит для индексированных массивов, когда необходимо управлять порядком обхода, шагом или пропускать элементы.
- Синтаксис:
for ($i = 0; $i < count($array); $i++) { ... } - Рекомендуется сохранять
count($array)в переменную перед циклом, чтобы избежать повторного вычисления длины массива на каждой итерации. - Позволяет легко обходить массив с шагом, например:
$i += 2для обработки каждого второго элемента.
Пример обхода с шагом:
$numbers = [10, 20, 30, 40, 50];
$len = count($numbers);
for ($i = 0; $i < $len; $i += 2) {
echo $numbers[$i] . "\n";
}
Рекомендации по выбору цикла

- Используйте
foreachдля ассоциативных массивов и для удобного доступа к значениям без индексов. - Используйте
for, если нужен контроль за порядком, пропуском элементов или модификацией массива через индекс. - Для больших массивов предпочтительнее хранить
count($array)в переменной при использованииforдля оптимизации производительности. - При изменении элементов массива через цикл всегда учитывайте, нужна ли ссылка
&вforeachили прямое присваивание по индексу вfor.
Сортировка массивов по ключам и значениям
В PHP сортировка массивов может выполняться по ключам и по значениям с использованием встроенных функций. Для сортировки по значениям применяются sort() и rsort(), которые переиндексируют массив, и asort() и arsort(), сохраняющие ассоциации ключ-значение.
Пример сортировки по значениям с сохранением ключей:
$arr = ["яблоко" => 3, "банан" => 1, "груша" => 2];
asort($arr);
// Результат: ["банан" => 1, "груша" => 2, "яблоко" => 3]
Для сортировки по ключам используются ksort() и krsort(). Функции сортируют массив в алфавитном или числовом порядке ключей без изменения значений.
Пример сортировки по ключам в обратном порядке:
$arr = ["c" => 3, "a" => 1, "b" => 2];
krsort($arr);
// Результат: ["c" => 3, "b" => 2, "a" => 1]
Для более сложных критериев используется usort() и uksort(), принимающие функцию сравнения. Это удобно при сортировке объектов или многомерных массивов.
Пример сортировки многомерного массива по конкретному полю:
$arr = [
["name" => "Иван", "age" => 25],
["name" => "Анна", "age" => 30],
["name" => "Олег", "age" => 20]
];
usort($arr, function($a, $b) {
return $a['age'] <=> $b['age'];
});
// Результат: [{"name" => "Олег", "age" => 20}, {"name" => "Иван", "age" => 25}, {"name" => "Анна", "age" => 30}]
При сортировке важно учитывать тип данных: числовые строки сортируются по значению, а не по алфавиту, если используется правильная функция. Для пользовательских условий рекомендуется явное указание логики сравнения.
Комбинация сортировок по ключам и значениям позволяет создавать упорядоченные ассоциативные массивы, например, сначала сортировка по значению, затем по ключу для одинаковых значений.
Следуя этим практикам, можно управлять любыми массивами PHP с точным контролем порядка элементов.
Поиск элементов и проверка существования ключей
Для поиска значения в массиве PHP используйте функцию in_array(). Она проверяет, существует ли элемент, и возвращает true или false. Например:
$fruits = ['яблоко', 'банан', 'вишня'];
if (in_array('банан', $fruits)) { echo 'Найдено'; }
Для поиска ключа применяется array_key_exists(). Она точна даже для значений null:
$users = ['id' => 101, 'name' => 'Анна'];
if (array_key_exists('name', $users)) { echo 'Ключ существует'; }
Функция array_search() возвращает ключ элемента, если он найден, иначе false. Удобно для обратного поиска:
$key = array_search('вишня', $fruits);
if ($key !== false) { echo 'Элемент найден под ключом '.$key; }
Для ассоциативных массивов рекомендуется использовать isset() при проверке существования ключа с ненулевым значением, что ускоряет выполнение по сравнению с array_key_exists:
if (isset($users['id'])) { echo 'ID присутствует'; }
При работе с многомерными массивами целесообразно применять комбинацию isset() или array_key_exists() с логическим оператором && для последовательной проверки вложенных ключей:
if (isset($data['user']) && array_key_exists('email', $data['user'])) { echo $data['user']['email']; }
Для фильтрации массива по условию можно использовать array_filter() с колбэком, что позволяет искать значения по конкретным критериям без ручного перебора:
$result = array_filter($fruits, fn($fruit) => str_starts_with($fruit, 'в'));
print_r($result);
Эффективная проверка ключей и поиск значений повышает производительность кода, особенно при работе с большими массивами. in_array(), array_search(), isset() и array_key_exists() – основной набор инструментов для точного управления данными.
Объединение и разбиение массивов

Для объединения массивов в PHP используется функция array_merge(). Она объединяет два и более массивов, сохраняя порядок элементов. Если массивы содержат одинаковые числовые ключи, значения перенумеровываются, а строковые ключи перезаписываются последним значением.
Пример объединения:
$array1 = [1, 2, 3]; $array2 = [4, 5, 6]; $result = array_merge($array1, $array2); // $result = [1, 2, 3, 4, 5, 6]
Для сохранения ключей используется + или функция array_merge_recursive(), которая сохраняет все значения одинаковых ключей в виде массива.
Разбиение массивов выполняется функциями array_chunk() и array_slice(). array_chunk() делит массив на подмассивы заданного размера, что удобно для обработки больших массивов или постраничной загрузки данных.
Пример разбиения:
$data = [1, 2, 3, 4, 5, 6, 7]; $chunks = array_chunk($data, 3); // $chunks = [[1,2,3], [4,5,6], [7]]
array_slice() извлекает конкретный сегмент массива по смещению и длине, сохраняя ключи при необходимости:
$segment = array_slice($data, 2, 3); // $segment = [3,4,5]
Рекомендуется использовать array_merge() при необходимости объединить данные для дальнейшей обработки, а array_chunk() – при пакетной обработке или разбиении на страницы. Для точного извлечения диапазона элементов эффективнее array_slice(), особенно при работе с ассоциативными массивами.
Использование многомерных массивов

Многомерные массивы позволяют хранить данные в виде таблиц, матриц или сложных структур. В PHP они создаются вложением массивов друг в друга. Например, двумерный массив может хранить список студентов с оценками:
$students = [ ["Имя" => "Алексей", "Математика" => 5, "Физика" => 4], ["Имя" => "Мария", "Математика" => 4, "Физика" => 5], ];
Для доступа к элементам массива используют двойное индексирование. Например, чтобы получить оценку по физике Марии:
$grade = $students[1]["Физика"];
| Имя | Математика | Физика |
|---|---|---|
| {$student[‘Имя’]} | {$student[‘Математика’]} | {$student[‘Физика’]} |
Для массивов более высокой размерности (трёх и более) используют вложенные циклы. Например, хранение оценок по предметам для нескольких классов:
$classes = [ "Класс 1" => [ ["Имя" => "Иван", "Математика" => 5], ["Имя" => "Ольга", "Математика" => 4] ], "Класс 2" => [ ["Имя" => "Сергей", "Математика" => 3], ["Имя" => "Анна", "Математика" => 5] ] ];
Для обхода таких массивов применяют вложенные foreach:
foreach ($classes as $className => $students) {
echo "Класс: $className\n";
foreach ($students as $student) {
echo $student['Имя'] . " - " . $student['Математика'] . "\n";
}
}
Практическая рекомендация: для больших массивов используйте ключи с описательными названиями вместо числовых индексов, это повышает читаемость кода и снижает вероятность ошибок при обращении к данным.
Применение встроенных функций для работы с массивами
В PHP встроенные функции позволяют добавлять, удалять, сортировать, фильтровать и изменять массивы без использования циклов, повышая читаемость кода и снижая вероятность ошибок.
- Добавление и удаление элементов:
array_push($arr, $value1, $value2)– добавляет элементы в конец массива.array_pop($arr)– удаляет последний элемент и возвращает его.array_unshift($arr, $value)– добавляет элементы в начало массива.array_shift($arr)– удаляет первый элемент массива.
- Сортировка:
sort($arr)– сортировка значений по возрастанию с переиндексацией.rsort($arr)– сортировка по убыванию с переиндексацией.asort($arr)– сортировка значений с сохранением ключей.ksort($arr)– сортировка по ключам по возрастанию.usort($arr, 'callback')– пользовательская сортировка по значению.
- Поиск и проверка:
in_array($value, $arr)– проверяет наличие значения в массиве.array_key_exists($key, $arr)– проверяет существование ключа.array_search($value, $arr)– возвращает ключ первого совпадения илиfalse.
- Модификация и фильтрация:
array_map('callback', $arr)– применяет функцию ко всем элементам и возвращает новый массив.array_filter($arr, 'callback')– возвращает массив элементов, удовлетворяющих условию.array_reduce($arr, 'callback', $initial)– сводит массив к одному значению по заданной логике.
- Соединение и разбиение:
array_merge($arr1, $arr2)– объединяет массивы, числовые ключи перенумеровываются.array_slice($arr, $offset, $length)– извлекает часть массива без изменения исходного.array_splice($arr, $offset, $length, $replacement)– удаляет и заменяет элементы массива.
Рекомендации:
- Использовать
array_mapиarray_filterдля функциональной обработки массивов без циклов. - Для больших массивов уменьшать количество вызовов
array_merge, работать через ссылки. - Ассоциативные массивы сортировать с сохранением ключей через
asortиksort. - Для надежного поиска комбинировать
array_key_existsиin_array. - Сложные условия сортировки реализовывать через
usortс точной функцией сравнения.
Вопрос-ответ:
Как создать массив в PHP и какие типы массивов существуют?
В PHP массив можно создать с помощью квадратных скобок или функции array(). Например: $arr = [1, 2, 3]; или $arr = array(1, 2, 3);. Существуют два основных типа массивов: индексированные, где элементы имеют числовые ключи, и ассоциативные, где ключи могут быть строками. Индексированные массивы удобны для хранения упорядоченных данных, а ассоциативные – для хранения информации, доступной по именам.
Как получить длину массива и проверить, существует ли в нем элемент?
Для определения количества элементов используется функция count(). Например, count($arr) вернет число элементов массива $arr. Чтобы проверить наличие ключа, используют array_key_exists('ключ', $arr) или оператор isset($arr['ключ']). Первый вариант вернет true даже если значение равно null, а второй вернет false в этом случае. Такой подход позволяет безопасно работать с массивами и избегать ошибок при обращении к несуществующим элементам.
Какие существуют способы перебора массива?
Существует несколько способов обхода массива. Наиболее популярный — цикл foreach, который автоматически перебирает все элементы: foreach ($arr as $key => $value) { ... }. Можно также использовать классический for для индексированных массивов: for ($i = 0; $i < count($arr); $i++) { ... }. Иногда удобно применять функции array_map или array_walk для изменения или обработки всех элементов, не прибегая к явному циклу.
Как объединять массивы и удалять из них элементы?
Для объединения используют оператор + или функцию array_merge(). Разница в том, что при array_merge() ключи могут перезаписываться, а при операторе + сохраняются только уникальные ключи первого массива. Для удаления элементов применяются функции unset($arr['ключ']) или array_splice($arr, $start, $length), которая позволяет удалить элемент по индексу или целый диапазон. Такие методы помогают гибко управлять структурой массива.
