Тип данных Array

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

В PHP существует три типа массивов

Синтаксис

Массив может быть создан языковой конструкцией array(). В качестве параметров она принимает любое количество разделенных запятыми пар key => value (ключ => значение).

				
	array(
		key  => value,
		key2 => value2,
		key3 => value3,
	...
	)
				
			

Запятая после последнего элемента массива необязательна и может быть опущена. Обычно это делается для однострочных массивов, т.е. array(1, 2) предпочтительней array(1, 2, ). Для многострочных массивов с другой стороны обычно используется завершающая запятая, так как позволяет легче добавлять новые элементы в конец массива.

Начиная с PHP 5.4 возможно использовать короткий синтаксис определения массивов, который заменяет языковую конструкцию array() на [].

				
		$arr = array(
			"apple" => 3.5,
			"book" => 1,
		);
				
			

key может быть либо типа integer, либо типа string. value может быть любого типа.

Дополнительно с ключом key будут сделаны следующие преобразования:

Массивы (тип array) и объекты (тип object) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).
Если несколько элементов в объявлении массива используют одинаковый ключ, то только последний будет использоваться, а все другие будут перезаписаны.

Параметр key является необязательным. Если он не указан, PHP будет использовать предыдущее наибольшее значение ключа типа integer, увеличенное на 1.

				
	$arr = array ("Hello", "user", "zamt");
	var_dump ($arr);//[0] - "Hello", [1] - "user", [2] - "zamt"
				
			

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

Доступ к элементам массива

Доступ к элементам массива может быть осуществлен с помощью синтаксиса array[key].

				
	$arr = array("Hello", "user", "zamt");
	echo $arr[2]; // "zamt"
	
	/* Поинтереснее пример */
	//многомерный массив для демонстрации
	$arr = [
		"fio" => "Ivan Inanov",
		"age" => 24,
		"tel" => array(
				  "mobile" => "9908906532",
				  "home" => "75245",
				),
		2 => 2456,
	];
	  
	//доступ через квадратные скобки
	echo "\n".$arr[2];
	echo "\n".$arr["fio"];
	echo "\n".$arr["tel"]["home"];
				
			

Доступ к элементам массива

И квадратные и фигурные скобки можно взаимозаменяемо использовать для доступа к элементам массива (т.е. и $array[42] и $array{42} равнозначны).

С PHP 5.4 стало возможным прямое разыменование массива, возвращаемого в качестве результата вызова функции или метода. Раньше приходилось использовать временные переменные.

С PHP 5.5 возможно разыменовывать массив буквально.

Разыменовывание массива

				
	function getArr() {
		return array(mt_rand(0, 40), mt_rand(50, 60), mt_rand(123, 459));
	}
	
	echo getArr()[1] . PHP_EOL;
	
	$new_arr = getArr();
	var_dump($new_arr);
	
	/* Что здесь будет? */
	$new_arr += getArr();
	var_dump($new_arr);
				
			
Попытка доступа к неопределенному ключу в массиве - это то же самое, что и попытка доступа к любой другой неопределенной переменной: будет сгенерирована ошибка и результат будет NULL.

Модификация массива

Существующий массив может быть изменен явной установкой значений в нем.

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

				
	$arr[key] = value;
	$arr[] = value;
	// key может быть integer или string
	// value может быть любым значением любого типа
				
			

Если массив $arr еще не существует, он будет создан. Таким образом, это еще один способ определить массив array. Однако такой способ применять не рекомендуется. Лучше инициализировать переменную путем явного присваивания значения.

Начиная с PHP 7.1.0, используя в оператор "пустой индекс" на строке, приведет к фатальной ошибке. Ранее, в этом случае, строка молча преобразовывалась в массив.

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

Модификация массива

				
	$arr = [
		5 => "five",
		9 => "nine",
	];

	/* Добавим пару элементов */
	$arr[] = "ten"; //$arr[10]
	var_dump($arr);

	$arr[5] = "newFIVE";
	var_dump($arr);

	$arr[0] = "zero";
	var_dump($arr);

	/* Удаление элементов */
	foreach($arr as $key => $val) {
		echo "Удалили [$key] = $val".PHP_EOL;
		unset($arr[$key]);
	}
	var_dump($arr);

	/* Удаление массива */
	unset($arr);
	//var_dump($arr);//выдаст ошибку


	$newArr["one"] = "test";//так не рекомендуется создавать массивы
	var_dump($newArr);
				
			

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

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

Особеность индексации

				
	$arr = array(0, 1, 2,);
	var_dump($arr);
	
	/* Удаление всех элементов */
	foreach($arr as $key => $val) {
		unset($arr[$key]);
	}
	
	$arr[] = 3;
	var_dump($arr); // Будет [3] = [3] ,а не [0] = [3]
	
	/* Но можно всё исправить */
	$arr = array_values($arr); // переиндексация массива
	$arr[] = 4;
	var_dump($arr);
				
			

Функции для работы с массивами

Для работы с массивами существует достаточное количество полезных функций.

Функции для работы с массивами