Рассмотрим вопрос о таком понятии как массив.
Ранее мы рассказывали о т.н. скалярных (или простых) типах данных. Это означает, что переменные этого типа содержат одно конкретное значение — например, строка, число, false, null.
Массивы относятся к т.н. структурированным типам данных. Это означает, что переменные этого типа данных могут хранить в себе несколько значений.
Рассмотрим пример, аналогичный тому, который был приведен в уроке про понятие переменной — коробки и яблоки.
Допустим у нас есть коробка на которой написано «яблоки» и в ней лежит 5 яблок. Рядом поставим коробку, на которой написано «бананы» и в нее поместим 10 бананов. С ними рядом также поставим коробку «апельсины», и поместим в нее 3 апельсина. Получили три коробки с фруктами. Эти три коробки поместим в одну большую и назовем ее «фрукты». Это и есть массив — большая коробка, в которой хранятся другие коробки со своим содержимым.
В терминах программирования, массив — это область в памяти, которая является объединением других областей памяти. Массивы можно записывать в переменные и тогда, фактически, значение этой переменной будет содержать некоторую группу значений.
Рассмотрим массивы в PHP.
Массивы бывают двух типов — чисельно-индексные (или списки) и ассоциативные.
В этом уроке рассмотрим чисельно-индексные массивы.
Вернемся к примеру про коробку с фруктами. Вместо названий «яблоки», «бананы» и «апельсины» мы пронумеруем соответствующие коробки начиная с нуля. Получим одну большую коробку «фрукты» и внутри нее пронумерованные коробки 0, 1, 2. Это и есть чисельно-индексный массив.
В терминах PHP — это группа значений, которые пронумерованы. Их нумерация по умолчанию начинается с нуля, но это можно изменить в зависимости от поставленных задач.
Определение массива. Для того, чтобы определить массив PHP, используется функция array(), в которой указываются значения элементов массива через запятую:
array( val_1, val_2, val_3, … , val_N )
Значения элементов могут принадлежать к разным типам данных. Также в качестве значения элемента массива можно указать некоторую переменную.
В примере ниже в переменную $fruits были записаны значения, которые соответствуют количеству яблок, бананов и апельсин. Эти значения называют элементами массива.
Доступ к элементам массива. Для получения доступа к конкретному элементу массива необходимо знать его номер. Этот номер называют индексом или ключом. Ключ (индекс) необходимо указать в квадратных скобках справа от переменной массива. Элемент массива можно таким образом переопределить.
Определение нумерации элементов. Для определения нестандартной нумерации элементов массива, используется следующий синтаксис функции array()
array( key_1 => val_1, key_2 => val_2, key_3 => val_3, … , key_N => val_N )
<?php $fruits = array(5, 10, 3); $var = 'Something'; $arr = array(5, 10, 3, 'some string', false, 2.54, $var); $apples_amount = $fruits[0]; $bananas_amount = $fruits[1]; $oranges_amount = $fruits[2]; $fruits[2] = 24; // now we get array of 5, 10, 24 echo '<br>'; $numbers = array(22 => 'twenty two', '100' => 'one hundred', '45' => 'fourty five'); echo $numbers[100]; // we get 'one hundred'
Как было отмечено в предыдущем уроке, массивы невозможно вывести на экран при помощи функции echo, т.к. это строковая функция (оператор). Для выведения ключей и значений элементов массива на экран используется функция print_r (название от Print Recursive).
Эта функция выводит на экран значение ее аргумента — будь то скалярное значение или структурированное. Как правило эта функция используется для отображения массивов и объектов.
<?php $myArray = array(10 => 'hello', 20 => 'world'); print_r($myArray); echo '<br>'; echo '<pre>'; print_r($myArray); echo '</pre>';
В этом уроке рассмотрим понятие ассоциативного массива.
Ассоциативный массив — это массив у которого ключами могут быть не только целые числа, но и строки. При этом их необходимо явно определять, используя функцию array().
Доступ к значениям этого массива осуществляется так же, как и для списков, но ключ указывается в виде строкового значения. Ассоциативный массив может содержать в себе как целые ключи (как чисельно-индексный), так и строковые.
Ниже рассмотрен пример с фруктами, реализованный при помощи ассоциативного массива. Напомним, что у нас есть одна большая коробка фрукты, которая содержит коробки с названиями разных фруктов.
Замечание. При обращении к элементу ассоциативного массива по ключу, сам ключ необходимо указывать в кавычках — т.к. это строка. В противном случае интерпретатор выведет на экран замечание. Детальнее — в уроке про константы.
<?php $fruits = array('apples' => 5, 'bananas' => 10, 'oranges' => 3); print_r($fruits); // we have 10 bananas echo "We have "; echo $fruits['bananas']; echo " bananas"; // changing element of array $fruits['apples'] = 12; $arr = array('test', 'test 2', 'some_key' => 'hello'); print_r($arr);
Что будет если мы захотим поместить массив внутрь массива? Мы получим массив в массиве или многомерный массив.
Вернемся к примеру с фруктами. Пусть теперь у нас будут еще и овощи. Возьмем две новые коробки и назовем их ‘баклажаны’ и ‘огурцы’. Эти коробки мы наполним тремя баклажанами и шестью огурцами соответственно. Эти две коробки мы положим в одну большую под названием ‘овощи’. Теперь мы получили две большие коробки — с фруктами и с овощами. Эти две большие коробки поместим в еще большую и назовем ее ‘еда’. Вот мы и получили многомерный массив — коробка, которая содержит коробки, которые содержат коробки.
Реализация многомерных массивов на PHP осуществляется аналогично обыкновенным одномерным массивам. Каждый элемент массива, который также является массивом определяется при помощи функции
array()
<?php $fruits = array('apples' => 5, 'bananas' => 10, 'oranges' => 3); $vegetables = array('cucumbers' => 6, 'eggplants' => 3); $food = array($fruits, $vegetables); // output echo '<pre>'; print_r($food); echo '</pre>';