Что такое массив
Массив - это переменная, которая может содержать в себе сразу несколько значений.
Например, так можно объявить массив с тремя значениями:
<?php
$heroes = ['Шварценеггер', 'Сталлоне', 'Джеки Чан'];
В коде выше мы создаём переменную $heroes и добавляем в неё 3 строки.
Массивы также отлично подходят для объединения нескольких связанных между собой значений, например характеристик товара:
<?php
$product = [
'article' => 'ABC123',
'name' => 'Смартфон iPhone X 64Gb White',
'price' => 50000,
];
Создание массива
Для создания пустого массива просто укажите квадратные скобки вместо значения:
<?php
$arr = [];
var_dump($arr); // Посмотрим, что внутри?
Результат в браузере:
array(0) { }
PHP сообщает нам, что в переменной лежит массив (англ. array), в котором находится 0 значений.
Чтобы объявить массив с данными, просто перечислите значения в квадратных скобках:
<?php
$brands = ['samsung', 'apple', 'nokia'];
Теперь в переменной $brands лежит массив, состоящий из трёх элементов.
Создание массивов с помощью квадратных скобок работает начиная с версии PHP 5.4. До этого использовался более громоздкий синтаксис:
<?php
$arr = array('samsung', 'apple', 'nokia');
Ключи и значения массива
Массив состоит из ключей (индексов) и соответствующих им значений. Это можно представить как таблицу:
Ключ | Значение |
---|---|
0 | Samsung |
1 | Apple |
2 | Nokia |
У каждого значения есть свой ключ. В массиве не может быть несколько одинаковых ключей.
Вернёмся к предыдущему примеру и посмотрим, что лежит в массиве:
<?php
var_dump(['samsung', 'apple', 'nokia']);
Результат в браузере:
array(3) {
[0]=> string(7) "samsung"
[1]=> string(5) "apple"
[2]=> string(5) "nokia"
}
Когда мы создаём массив без указания ключей, PHP генерирует их автоматически в виде чисел, начиная с 0.
Указание ключей происходит с помощью конструкции =>:
<?php
$product1 = ['name' => 'iPhone', 'price' => 5000];
// Большие массивы удобней писать так:
$product2 = [
'name' => 'Samsung',
'price' => 5000,
'status' => true,
'shipping' => 200
];
Простые и ассоциативные массивы
Когда мы создаём массив с числовыми ключами, такой массив называется простым или числовым.
Когда мы создаём массив и указываем строковые ключи вручную, такой массив называется ассоциативным, поскольку по названию ключа можно понять назначение этого значения - название товара, возраст человека и т.д.
Вывод массива
Вывод элементов массива выглядит следующим образом:
<?php
$arr = ['пицца', 'мороженое'];
echo $arr[0]; // Выводим элемент с ключом 0
echo $arr[1]; // Выводим элемент с ключом 1
Для вывода содержимого массива можно использовать как уже знакомую нам функцию var_dump(), так и print_r(), которая предоставляет информацию о массивах в чуть более удобном для чтения виде.
Однако обе функции выводят информацию на одной строке, что в случае с массивами превращается в кашу. Чтобы этого не происходило, используйте тег <pre>:
<?php
echo '<pre>';
print_r(['val1', 'val2', 'val3']);
echo '</pre>';
Результат в браузере:
Array
(
[0] => val1
[1] => val2
[2] => val3
)
Также вывести содержимое массива можно с помощью цикла foreach:
<?php
$arr = ['Огонь', 'Вода', 'Воздух', 'Земля'];
foreach($arr as $key => $value)
echo $key . ':' . $value . '<br>';
Подробней работу цикла foreach мы разберём в отдельном уроке.
Добавление и удаление элементов
Добавление новых элементов в массив выглядит следующим образом:
<?php
// Создаём массив
$arr = ['name' => 'Вася'];
// Добавляем элементы
$arr['age'] = 20;
$arr['status'] = 'В смятении';
// Перезаписываем элемент
$arr['status'] = 'Спокоен';
Но если название ключа не играет роли, его можно опустить:
<?php
$var = [15, 20, 25];
$var[] = 30; // Элемент добавится с ключом 3
$var[] = 35; // Элемент добавится с ключом 4
Удалить элемент массива можно с помощью функции unset():
<?php
$arr = [1, 2, 3];
unset($arr[0]); // Удаляем 1-ый элемент
Двумерные и многомерные массивы
В качестве значения массива мы можем передать ещё один массив:
<?php
// Создаём массив
$human = ['name' => 'Вася'];
// Добавляем новый элемент, содержащий массив
$human['hands'] = ['left', 'right'];
print_r($human);
В примере выше мы создали массив $human, а затем внутри него создали ещё один массив $human['hands']. Результат в браузере:
Array
(
[name] => Вася
[hands] => Array
(
[0] => left
[1] => right
)
)
Обратиться к элементу многомерного массива можно так:
<?php
echo $human['hands'][0]; // выведет 'left'
Теперь мы можем хранить в одном массиве целую базу товаров:
<?php
$products = [
[
'name' => 'iPhone',
'price' => 5000,
'status' => true
],
[
'name' => 'Samsung Galaxy',
'price' => 5000,
'status' => true
]
];
Или альтернативный вариант:
<?php
$products = [];
$products[] = [
'name' => 'iPhone',
'price' => 5000,
'status' => true
];
$products[] = [
'name' => 'Samsung Galaxy',
'price' => 5000,
'status' => true
];
Задача 1
1. Создайте массивы $user1 и $user2, заполните ключи name и age в каждом массиве любыми значениями.
2. Увеличьте значение age у обоих массивов на 50%.
3. Выведите на экран значение ключа name обоих пользователей.
<?php
$user1 = [
'name' => 'Петросян',
'age' => 50
];
$user2 = [
'name' => 'Мартиросян',
'age' => 40
];
$user1['age'] *= 1.5;
$user2['age'] *= 1.5;
echo $user1['name'], ' ', $user2['name'];
Задача 2
1. Создайте массив $city, добавьте в него ключ name с любым значением.
2. Создайте подмассив streets с любыми случайными улицами. Каждая улица должна иметь имя (name) и количество домов (buildings_count), а также подмассив из номеров домов (old_buildings), подлежащих сносу.
<?php
$city = [
'name' => 'Ростов',
'streets' => [
[
'name' => 'Первая улица',
'buildings_count' => 15,
'old_buildings' => [4, 8, 12]
],
[
'name' => 'Вторая улица',
'buildings_count' => 5,
'old_buildings' => [1, 3]
],
[
'name' => 'Третья улица',
'buildings_count' => 23,
'old_buildings' => [2, 7, 12, 18]
],
]
];
// Жесть, да?
echo $city['streets'][2]['old_buildings'][1]; // 7