Типы массивов: индексированные, ассоциативные, многомерные

Раздел: Основы PHP -> Типы массивов

Виды массивов в PHP

Какие существуют виды массивов в PHP и как их создавать?

В PHP массивы делятся на три основных типа: индексированные, ассоциативные и многомерные. Индексированные массивы используют числовые ключи по порядку. Ассоциативные массивы используют строковые или смешанные ключи. Многомерные массивы содержат другие массивы в качестве элементов.

Пример индексированного массива

<?php
$arr = ['яблоко', 'банан', 'вишня'];
echo $arr[0]; // яблоко

виды массивов php (виды массивов в php)

Пример ассоциативного массива

<?php
$person = ['name' => 'Иван', 'age' => 25];
echo $person['name']; // Иван

Пример многомерного массива

<?php
$matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];
echo $matrix[1][2]; // 6

Типичная ошибка: попытка обратиться к несуществующему ключу. Возникает предупреждение E_WARNING. Решение: проверять ключи с помощью array_key_exists() или isset().

Проблема: путаница между индексированными и ассоциативными массивами при использовании функций сортировки. Например, sort() сбрасывает ключи. Рекомендуется использовать asort() для ассоциативных массивов.

Основной способ создания массива в PHP - использование квадратных скобок [] или функции array(). Для большинства задач короткий синтаксис считается более эффективным и читаемым.

Как создать массив с фиксированным количеством элементов, заполненный одинаковыми значениями?

Использование функции array_fill() позволяет создать массив с заданным количеством элементов и одинаковым значением.

<?php
$arr = array_fill(0, 5, 'PHP');
print_r($arr);
// Array ( [0] => PHP [1] => PHP [2] => PHP [3] => PHP [4] => PHP )

Ошибка: если передать отрицательное количество элементов, будет выброшено исключение. Необходимо проверять число.

Как создать ассоциативный массив, объединив два списка ключей и значений?

Функция array_combine() создаёт ассоциативный массив, используя один массив как ключи, а другой как значения.

<?php
$keys = ['id', 'name', 'email'];
$values = [1, 'Мария', 'maria@example.com'];
$user = array_combine($keys, $values);
print_r($user);
// Array ( [id] => 1 [name] => Мария [email] => maria@example.com )

Если количество ключей и значений не совпадает, функция возвращает false и генерирует предупреждение. Перед использованием стоит проверять длину массивов.

Как создать массив чисел или символов в заданном диапазоне?

Функция range() создаёт массив, содержащий последовательность чисел или символов.

<?php
$numbers = range(1, 10, 2); // с шагом 2
print_r($numbers);
// Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )

$letters = range('a', 'f');
print_r($letters);
// Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )

При использовании очень больших диапазонов память может переполниться. Для генерации последовательностей большого размера лучше использовать генераторы или цикл.

Как создать массив с фиксированной памятью для повышения производительности?

Класс SplFixedArray предоставляет массив с фиксированным размером, что уменьшает накладные расходы на память. Он подходит для больших наборов данных, где количество элементов известно заранее.

<?php
$fixed = new SplFixedArray(3);
$fixed[0] = 'A';
$fixed[1] = 'B';
$fixed[2] = 'C';
echo $fixed[1]; // B
// Попытка выйти за границы вызовет исключение

Нельзя добавить элемент за пределами объявленного размера, иначе - RuntimeException. Это ограничение может быть неудобно для динамических данных.

Как быстро создать ассоциативный массив из переменных с именами ключей?

Функция compact() создаёт массив из существующих переменных, используя их имена как ключи.

<?php
$name = 'Пётр';
$age = 30;
$city = 'Москва';
$data = compact('name', 'age', 'city');
print_r($data);
// Array ( [name] => Пётр [age] => 30 [city] => Москва )

Функция игнорирует несуществующие переменные; ошибок не возникает, но результат может быть неполным. Решение: проверять наличие переменных перед вызовом.

Расширенные примеры работы с массивами

Обход многомерного массива с помощью рекурсивной функции

Пример
<?php
function printArray($arr, $indent = 0) {
    foreach ($arr as $key => $value) {
        echo str_repeat(' ', $indent) . $key . ': ';
        if (is_array($value)) {
            echo chr(10);
            printArray($value, $indent + 4);
        } else {
            echo $value . chr(10);
        }
    }
}
$data = [
    'users' => [
        ['name' => 'Анна', 'age' => 28],
        ['name' => 'Борис', 'age' => 35]
    ],
    'settings' => ['theme' => 'dark', 'lang' => 'ru']
];
printArray($data);
?>
users: 
    name: Анна
    age: 28
    name: Борис
    age: 35
settings: 
    theme: dark
    lang: ru

Использование array_map с анонимной функцией для преобразования элементов

Пример
<?php
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(function($n) { return $n * $n; }, $numbers);
print_r($squared);
// Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )

Сортировка ассоциативного массива по значениям с сохранением ключей (asort)

Пример
<?php
$ages = ['Иван' => 30, 'Мария' => 25, 'Алексей' => 28];
asort($ages);
print_r($ages);
// Array ( [Мария] => 25 [Алексей] => 28 [Иван] => 30 )
Array ( [Мария] => 25 [Алексей] => 28 [Иван] => 30 )

Фильтрация массива с помощью array_filter

Пример
<?php
$numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
$even = array_filter($numbers, function($n) { return $n % 2 === 0; });
print_r($even);
// Array ( [0] => 0 [2] => 2 [4] => 4 [6] => 6 [8] => 8 )
Array ( [0] => 0 [2] => 2 [4] => 4 [6] => 6 [8] => 8 )

Вычисление суммы через array_reduce

Пример
<?php
$prices = [100, 250, 300, 150];
$total = array_reduce($prices, function($carry, $item) { return $carry + $item; }, 0);
echo 'Итого: ' . $total; // Итого: 800
Итого: 800

Пересечение и разность массивов

Пример
<?php
$arr1 = [1, 2, 3, 4, 5];
$arr2 = [3, 4, 5, 6, 7];
$intersect = array_intersect($arr1, $arr2);
$diff = array_diff($arr1, $arr2);
print_r($intersect); // [3,4,5]
print_r($diff); // [1,2]
Array ( [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => 1 [1] => 2 )

Рекурсивный обход с array_walk_recursive

Пример
<?php
$nested = ['a' => ['b' => 1, 'c' => 2], 'd' => 3];
$result = [];
array_walk_recursive($nested, function($value, $key) use (&$result) {
    $result[] = $key . '=' . $value;
});
print_r($result);
// Array ( [0] => b=1 [1] => c=2 [2] => d=3 )
Array ( [0] => b=1 [1] => c=2 [2] => d=3 )

Виды массивов в PHP - comments

En
виды массивов php (php)