Массивы в PHP

Александр Кичатов

Что такое массив

Массив - это переменная, которая может содержать в себе сразу несколько значений.

Например, так можно объявить массив с тремя значениями:

<?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');

Ключи и значения массива

Массив состоит из ключей (индексов) и соответствующих им значений. Это можно представить как таблицу:

КлючЗначение
0Samsung
1Apple
2Nokia

У каждого значения есть свой ключ. В массиве не может быть несколько одинаковых ключей.

Вернёмся к предыдущему примеру и посмотрим, что лежит в массиве:

<?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

Комментарии