Массивы в PHP. Как происходит их создание, использование и удаление?

массивы в php. как происходит их создание, использование и удаление?

Осмысление массивов

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

Абстрактное определение:

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

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

схема принципа работы переменных в PHPРис1. Переменные в виде сложенных в них абстрактных гаечных ключей.

Массивы в PHP, как раз и дают нам удобную структуру для хранения подобных данных. Их можно представить в виде коробки, в которую мы можем положить другие коробки. Допустим, у нас уже есть сложенные по контейнерам гаечные ключи. Теперь мы просто возьмем большую коробку, наклеим на неё ярлык «гаечные ключи» и сложим туда контейнеры с ключами. Хоть предметов в кладовке и не стало меньше, наш поиск по ним гораздо упростился.

Схема принипа работы массивов в PHPРис2. Массив в виде сложенных в него абстрактных гаечных ключей.
Доступ к ключу происходит при указании его размера.

Точное определение:

Структура данных в виде набора составляющих, расположенных в оперативной памяти друг за другом. При этом доступ к отдельным элементам массива осуществляется с помощью индексов[1], то есть ссылки на массив с указанием номера (числового индекса) или имени (текстовый индекс) нужного элемента.

Правила именования и создания

В PHP существует два способа создания массивов. Приведенные ниже примеры совершенно равнозначны, но второй представленный синтаксис компактнее (добавлен в версии PHP 5.4) и в дальнейшем мы будем использовать только его. В примере используется функция var_dump(), которая осуществляет удобочитаемый вывод структуры массива в браузер.

//старый синтаксис создания (без указания индексов)
$fruits = array('Апельсин', 'Киви', 'Ананас');
//Вывод в браузер информации о структуре массива
var_dump($fruits);
/*
* Результат:
* array(3) {
*     [0]=> string(16) "Апельсин"
*     [1]=> string(8) "Киви"
*     [2]=> string(12) "Ананас"
* }
*/


//новый синтаксис создания (без указания индексов)
$cities = ['Брюсель', 'Москва', 'Париж'];
//Вывод в браузер информации о структуре массива
var_dump($cities);
/*
* Результат:
* array(3) {
*     [0]=> string(14) "Брюсель"
*     [1]=> string(12) "Москва"
*     [2]=> string(10) "Париж"
* }
*/

Правила создания массивов:

  1. Выражение должно начинаться со знака доллар «$». Это обусловлено требованиями синтаксиса. Если вы забудете указать его, то программный код завершится с ошибкой.
  2. Имя массива может содержать любое количество букв, цифр и знаков подчеркивания. Единственное условие – начинаться оно может только с буквы или знака подчеркивания. Если вы назначите имя, начинающееся с цифры, то программный код завершится с ошибкой.
  3. Для создания структуры массива используется оператор присваивания «=», за которым должно следовать определение структуры.
  4. Структура массива, определяющая содержащиеся в нем элементы, должна начинаться и заканчиваться квадратными скобками «[]» либо располагаться в конструкции array().
  5. Внутри конструкции определения структуры элементы должны располагаться через запятую, а индекс от значения необходимо разделять символом «=>» (о индексах и значениях будет рассказано далее).
  6. Индекс элемента массива может быть только целым числом или строкой.
  7. Значение элемента массива может быть любого доступного типа.
  8. Выражение создания массива, как и любое другое, должно завершаться точкой с запятой.

Индексы массива. Получение
значений элементов и добавление новых

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

Если при создании массива не указаны индексы, то такой массив по умолчанию создается как числовой, и все элементы, расположенные в нем, будут пронумерованы по порядку от числа «0» до «количество элементов - 1». Данные манипуляции необходимы для того, чтобы после инициализации массива мы могли обращаться к его элементам.

//инициализация массива и формирование вывода в браузер
$actors = ['Джордж Клуни', 'Дастин хофман', 'Брюс Уиллис'];
echo 'Мои любимые актеры: '.$actors[0].', '.$actors[1].', '.$actors[2];
/*
* Результат:
* Мои любимые актеры: Джордж Клуни, Дастин хофман, Брюс Уиллис
*/

Из примера видно, что для получения значения конкретного элемента, хранящегося в массиве, нужно вызвать конструкцию «$имя_массива[индекс_элемента];».

Чтобы добавить новый элемент в массив нам необходимо построить следующее выражение «$имя_массива[индекс_элемента] = значение_элемента;». Если в данном выражении не указать индекс элемента, то ему будет назначен самый последний числовой индекс.

//инициализация массива без индексов
$colors = ['Красный', 'Синий'];
//добавление элемента без указания индекса
$colors[] = 'Оранжевый';
//добавление элемента с указанием индекса
$colors[135] = 'Серый';

echo 'Тебе очень идет '.$colors[2].' цвет<br>';
echo 'Я надену '.$colors[135].' костюм';
/*
* Результат:
* Тебе очень идет Оранжевый цвет
* Я надену Серый костюм
*/

Заметка
Мы немного слукавили сказав, что в PHP можно создать массив только двумя способами. Если вы попытаетесь добавить новый элемент к несуществующему массиву, то он будет создан, операция произведена, а вы получите новый массив. Такие выражения очень запутывают код, и мы не рекомендуем создавать массивы этим образом.

Массивы с числовыми индексами
(индексируемый)

Числовые индексы могут быть заданы для элементов автоматически при отсутствии их явного указания. Если мы хотим самостоятельно задать порядок числовых индексов, то их нужно указать. Давайте создадим массив и поместим в него абстрактные гаечные ключи, а индексы укажем как их размеры. Такой массив будет называться индексируемым[2].

//инициализация c указанием числовых индексов
$spanners = [12 => 'Ключ на 12', 21 => 'Ключ на 21', 32 => 'Ключ на 32'];
var_dump($spanners);
/*
* Результат:
* array(3) {
*     [12]=> string(16) "Ключ на 12"
*     [21]=> string(18) "Ключ на 21"
*     [32]=> string(18) "Ключ на 32"
* }
*/

Вы можете указывать числовые ключи не для всех элементов массива. Для отсутствующих интерпретатор самостоятельно определит их. Однако нужно знать об одной особенности. Если вы первому или какому-либо еще элементу самостоятельно назначите числовой индекс, то автоматическое определение индексов будет вестись начиная с него.

//инициализация c нарушением порядка нумерации
$months = [1 => 'Январь', 'Февраль', 10 => 'Март', 'Апрель'];
var_dump($months);
/*
* Результат:
* array(4) {
*     [1]=> string(12) "Январь"
*     [2]=> string(14) "Февраль"
*     [11]=> string(8) "Март"
*     [12]=> string(12) "Апрель"
* }
*/

Массивы с строковыми индексами
(ассоциативные)

При явном указании индекса элемента, он может быть записан в виде строки. После инициализации массива, его элементы будут доступны по тому же принципу что и в массиве с числовыми индексами. Единственное отличие в том, что индекс элемента должен быть указан в одинарных или двойных кавычках. Заданный таким образом массив называется ассоциативным[3].

//инициализация c указанием строковых индексов
$fruitsCost = ['апельсин' => 5, 'ананас' => 10];
echo "Апельсин стоит ".$fruitsCost['апельсин'].'$<br>';
echo "Ананас стоит ".$fruitsCost['ананас'].'$<br>';
/*
* Результат:
* Апельсин стоит 5$
* Ананас стоит 10$
*/

Важной особенностью задания текстовых индексов является преобразование типов[4], о которых мы будем говорить в следующих статьях. Если вы попытаетесь задать индекс начинающийся с числа (к примеру «2MyMom»), то элемент получит индекс равный числу «2». Это не ошибка, а особенность языка. При дальнейшем изучении курса вы поймете, как это работает.

Удаление массива и его элементов

Удаление массивов в PHP полностью схоже с аналогичной операцией для переменных. Чтобы удалить массив целиком мы должны передать его функции unset().

//удаление массива целиком
$fruitsCost = ['апельсин' => 5, 'ананас' => 10];
unset($fruitsCost);
var_dump($fruitsCost);

/*
* Результат:
* NULL
*/

Если мы хотим удалить один из элементов массива, то необходимо передать его в функцию unset() таким образом, как обычно получаем его значение.

//удаление элемента массива
$fruitsCost = ['апельсин' => 5, 'ананас' => 10];
unset($fruitsCost['апельсин']);
var_dump($fruitsCost);

/*
* Результат:
* array(1) {
*     ["ананас"]=> int(10)
* }
*/

Термины, использованные в статье

  1. Индекс массива — это идентификатор (числовой или строковой) по которому из массива можно получить значение конкретного элемента.
  2. Индексируемый массив — это массив, элементы которого имеют только числовые индексы. Зачастую нумерация индексов в таком массиве идет по возрастанию от «0» до «количество элементов -1».
  3. Ассоциативный массив — это массив, элементы которого имеют только строковые индексы. Индекс в таком массиве часто называют ключами.
  4. Преобразование типов — внутренняя операция интерпретатора, которая позволяет двум различным типам данных участвовать в общем контексте программной операции. Как пример можно привести сложение строки «12» с числом 12. В результате получится число «24».

Последние публикации