Перейти к содержанию

Массивы в PHP

Массив — это ещё один тип данных, вроде числа или строки. Главное отличие массива от остальных типов данных заключается в его способности хранить в переменной больше одного значения. В предыдущих примерах имя переменной всегда ассоциировалось только с одним значением:

  • $name = "Иннокентий"
  • $age = 42

А если мы хотим узнать не только пол, имя и возраст пользователя, но и, допустим, любимые сериалы? Очень непросто назвать один самый любимый сериал, а вот вспомнить несколько — намного легче. Сохранение в переменную-массив нескольких значений выглядит так:

<?php
$fav_shows = [
    "game of thrones",
    "american horror story",
    "walking dead"
]

В этом примере мы сохранили в переменной $fav_shows сразу три значения. Но сохранить эти данные — это только половина дела. Как с ними потом работать? Уже знакомый вам способ вывода переменной на экран не будет работать с массивами:

<?php
print("Мои любимые сериалы: " . $fav_shows);

Так увидеть список любимых сериалов не получится. Дело в том, что массив — это не обычная переменная. Массив хранит не простые типы, вроде текста или чисел (их ещё называют «скалярными типами»), а более сложную структуру данных, поэтому здесь нужен особый подход.

Внутри массива у каждого значения есть адрес, по которому к нему можно обратиться. Такой адрес называется индексом. Индекс — это просто порядковый номер значения внутри массива. Индексация начинается с нуля, так что первый элемент получает индекс — «0», второй — «1», и так далее.

Чтобы получить определенный элемент массива, необходимо знать его индекс (ключ). Напечатаем названия всех сериалов из массива через запятую:

<?php
print("Мои любимые сериалы: "
    . $fav_shows[0] . ", "
    . $fav_shows[1] . ", "
    . $fav_shows[2]);

Теперь можно дать определение массива:

Массив — это совокупность множества элементов вида «ключ : значение».

Массивы позволяют перезаписывать существующие значения и добавлять новые. Добавить новое значение в массив можно так:

<?php
$fav_shows[] = "the big bang theory";

Новый элемент автоматически получит индекс равный максимальному индексу из существующих + 1. «Теория большого взрыва» сохранится в массиве под индексом 3.

Если нам перестал нравиться один из сериалов, так как новый сезон оказался очень плох или появился новый фаворит, значения в массиве можно заменить. Чтобы вычеркнуть старое значение и заменить его новым, нужно присвоить новое значение любому из существующих в массиве индексов:

<?php
$fav_shows[4] = "fargo";

Для полного удаления (без замены на другое) значения по его индексу существует функция unset:

<?php
unset($fav_shows[4]);

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

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

Запись всей информации о пользователе с помощью ассоциативного массива:

<?php
$user = [
    'age' => 42,
    'name' => 'Иннокентий',
    'fav_shows' => [
        "game of thrones",
        "american horror story",
        "walking dead"
    ]
];

Обратите внимание: массив может содержать другой массив в качестве одного из значений. В нашем примере мы поместили простой массив внутри ассоциативного под ключом fav_shows.

Вывод информации из ассоциативных массивов аналогичен простым массивам.

Показ всей информации о пользователе из переменной $user:

<?php
print("Имя: "
    . $user['name']
    . " Возраст: "
    . $user['age']
    . "Любимые сериалы: "
    . $user['fav_shows'][0] . ", "
    . $user['fav_shows'][1] . ", "
    . $user['fav_shows'][2];