Массивы в PHP

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

<?php
    $heroes = ['Шварценеггер', 'Сталлоне', 'Джеки Чан'];
?>

В коде выше мы создаём переменную $heroes и добавляем в неё 3 строки.

Массивы просто незаменимы, когда дело касается группировки значений по каким-либо признакам. Представим, что у нас есть интернет-магазин. Создадим для него несколько товаров:

<?php
    $product1 = 'iPhone';
    $product2 = 'Samsung Galaxy';
    $product3 = 'Nokia Lumia';
?>

Отлично. Но, по правде говоря, это ведь только названия товаров. На реальных сайтах есть ещё как минимум цена и наличие. Попробуем отразить это в коде:

<?php
    $product1_name = 'iPhone';
    $product1_price = 5000;
    $product1_quantity = true; // true - в наличии, false - нет в наличии

    $product2_name = 'Samsung Galaxy';
    $product2_price = 5000;
    $product2_quantity = true;

    $product3_name = 'Nokia Lumia';
    $product3_price = 4000;
    $product3_quantity = true;
?>

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

Создание массивов

Для создания пустого массива просто укажите квадратные скобки [] вместо значения:

<?php
$arr = [];

var_dump($arr); // Посмотрим, что внутри?
?>

Результат в браузере:

array(0) { }

PHP сообщает нам, что в переменной лежит массив (англ. array) с нулевым кол-вом элементов.

Чтобы объявить массив с данными, просто перечислите значения в квадратных скобках:

<?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,
    'quantity' => 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 = ['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-ый элемент
?>
Задача

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