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

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

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

Массив создается с помощью функции []:

<?php
	$a = []; //создаем массив $a
?>

Пока созданный нами массив не содержит никаких данных. Заполним его названиями дней недели (для краткости пишу две буквы каждого дня):

<?php
	$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
?>

Каждое значение списка, который мы записали в массив (в нашем случае каждый день недели), называется элементом массива.

Элементы разделяются между собой запятой. После этой запятой можно ставить пробелы, а можно и не ставить.

Обратите внимание на то, что названия дней недели представляют собой строки и поэтому взяты в кавычки. Кроме строк в массиве можно хранить числа, и их в кавычки мы не берем:

<?php
	//В массиве можно хранить как строки, так и числа:
	$a = ['пн', 256, 'ср', 34, 38, 'сб', 95];
?>

Посмотреть содержимое массива с помощью echo мы, увы, не сможем. Попробуйте сделать так:

<?php
	//Пробуем вывести с помощью echo содержимое массива $a:
	$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
	echo $a;
?>

Вы увидите на экране слово Array вместо содержимого массива.

Для того, чтобы PHP вывел нам все элементы массива, нужно воспользоваться функцией var_dump:

<?php
	//Пробуем вывести с помощью var_dump содержимое массива $a:
	$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
	var_dump($a);
?>

Вот теперь мы действительно увидим все элементы нашего массива.

Запомните этот момент: для того, чтобы узнать, какие именно элементы хранятся в массиве, мы должны пользоваться функцией var_dump, а не echo.

Как вывести отдельный элемент массива

Итак, массив месяцев мы составили и даже научились смотреть на него функцией var_dump. Однако, полезного пока мало, так как var_dump используется для отладки кода и выводит весь массив целиком.

Предположим, мы хотим вывести на экран среду.

Делается это так: нужно после переменной массива (в нашем случае $a) написать квадратные скобки [ ], а в них указать порядковый номер элемента, который мы хотим вывести: $a[3]. Казалось бы, что порядковый номер среды - это 3, но это не так. Потому что в программировании нумерация начинается с нуля. Поэтому 0 - это понедельник, 1 - это вторник, а 2 - это среда.

Посмотрите и повторите пример:

<?php
	//Выведем слово 'ср':
	$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
	echo $a[2];
?>

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

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

В нашем случае PHP сам определял ключи для элементов - это были их порядковые номера. Иногда это может оказаться неудобным - мы хотим вывести на экран название третьего дня недели (среду), а должны писать в квадратных скобках цифру 2.

Поэтому в PHP можно указать ключи в явном виде – так, как нам нужно. Сделаем так, чтобы понедельник имел ключ 1, а не ноль, как было раньше (и всем остальным дням прибавим единицу):

<?php
	//Укажем ключи в явном виде:
	$a = [1=>'пн', 2=>'вт', 3=>'ср', 4=>'чт', 5=>'пт', 6=>'сб', 7=>'вс'];
	echo $a[1]; //выведет 'пн'
?>

Синтаксис здесь такой: ключ, затем идет стрелка =>, а потом значение.

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

<?php
	//Массив работников:
	$a = ['Коля'=>200, 'Вася'=>300, 'Петя'=>400];
?>

Узнаем зарплату Васи:

<?php
	$a = ['Коля'=>200, 'Вася'=>300, 'Петя'=>400];
	echo $a['Вася']; //выведет 300
?>

Массивы, у которых явно указаны ключи, называются ассоциативными.

Хитрость с ключами

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

Напомню вам этот массив:

<?php
	//Укажем ключи в явном виде:
	$a = [1=>'пн', 2=>'вт', 3=>'ср', 4=>'чт', 5=>'пт', 6=>'сб', 7=>'вс'];
	echo $a[3]; //выведет 'ср'
?>

На самом деле нет необходимости расставлять ключи всем элементам - достаточно только первому элементу поставить ключ 1.

Если у второго элемента не будет ключа, PHP поставит его автоматически, причем следующий по порядку.

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

Давайте поправим наш массив:

<?php
	//Укажем ключи в явном виде:
	$a = [1=>'пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
	echo $a[3]; //выведет 'ср'
?>

Итак, этот массив с одним нашим ключом фактически будет таким же, как и массив со всеми ключами, но сделать его проще - ключ ставится только первому элементу, а не всем.

Как еще можно создать массив

Объявление массива с помощью команды [] не является единственным способом его создания.

Можно просто присвоить значения элементам массива, не объявляя его через array (PHP нас поймет и сам создаст массив):

<?php
	//Можно не писать [], а просто присвоить значения его элементам:
	$a[0] = 1;
	$a[1] = 2;
 	$a[2] = 3;
	var_dump($a); //с помощью var_dump убеждаемся в том, что $a – это массив
?>

Естественно, ключи могут быть не только числовыми, но и текстовыми:

<?php
	//Ключи могут быть строками:
	$a['Коля'] = 100;
	$a['Вася'] = 200;
	$a['Петя'] = 300;
	var_dump($a); //с помощью var_dump убеждаемся в том, что $a – это массив
?>

Кроме того, можно сделать так, что PHP сам добавит ключи (начиная с нуля и так далее). Для этого мы оставим квадратные скобки пустыми: $a[] = 1, а PHP сам добавит ключ. Пример:

<?php
	//Мы не пишем ключи в квадратных скобках
	$a[] = 100; //100 будет иметь ключ 0
	$a[] = 200; //200 будет иметь ключ 1
	$a[] = 300; //300 будет иметь ключ 1
	var_dump($a); //массив $a будет иметь вид [0=>100, 1=>200, 2=>300]
?>

Все способы создания массива

Итак, повторим все способы создания массива:

<?php
	//Можно просто его объявить:
	$a = [];

	//Можно его сразу и заполнить:
	$a = [1, 2, 3];

	//Можно не писать [], а просто присвоить значения его элементам:
	$a[0] = 1;
	$a[1] = 2;
	$a[2] = 3;

	//Можно даже не писать ключи, тогда PHP добавит их автоматически, начиная с нуля:
	$a[] = 1;
	$a[] = 2;
	$a[] = 3;
 ?>

Многомерный массив

Элементы массива могут быть не только строками и числами, но и массивами. То есть у нас получится массив массивов или многомерный массив.

Давайте сделаем массив студентов $students, который будет содержать два подмассива: студенты мужского пола и женского:

<?php
	//Многомерный массив студентов:
	$a = [
		'boys' => ['Коля', 'Вася', 'Петя'],
		'girls' => ['Даша', 'Маша', 'Лена'],
	];
?>

Чтобы вывести какой-либо элемент из многомерного массива следует писать уже не одну пару [ ], а две: $a['boys'][0] – так мы выведем 'Коля'.