Массивы

Последнее обновление: 11.03.2021

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

Есть несколько способов определения массивов. Первый способ представляет использование функции array():

$numbers = array();

В данном случае определяется пустой массив $numbers.

Второй способ представляет использование квадратных скобок []:

$numbers = [];

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

$numbers = [1, 2, 3, 4];

Аналогичное определение массива с помощью функции array():

$numbers = array(1, 2, 3, 4);

В качестве элементов массива могут выступать объекты любого типа.

Для обращения к элементам массива применяются ключи. Ключ может представлять число или строку или одновременно и числа, и строки.

Для обычных массивов ключ представляет число. Числовые ключи еще называют индексами. Нумерация индексов начинается с нуля, то есть первый элемент массива имеет индекс 0, второй элемент - индекс 1 и так далее.

Например, обратимся к третьему элементу массива:

<?php
$numbers = [1, 4, 9, 16];
echo $numbers[2];	// 9
?>

Поскольку нумерация индексов начинается с нуля, то чтобы обратиться к третьему элементу, надо использовать индекс 2.

Таким образом мы получаем значение элемента массива. Но также мы можем его изменить:

<?php
$numbers = [1, 4, 9, 16];
$numbers[1] = 6;
echo $numbers[1];	// 6
?>

При этом нужно учитывать количество элементов массива. Так, мы не можем обратиться к элементу с несуществующим индексом:

<?php
$numbers = [1, 4, 9, 16];
echo $numbers[4];
?>

В данном случае в массиве $numbers всего 4 элемента, поэтому индексом последнего элемента будет 3. Таким образом, элемента с индексом 4 в массиве не существует, и при попытке получить его значение echo $numbers[4] PHP нам покажет предупреждение.

Тем не менее если мы хотим установить элемент по еще не существующему индексу, мы можем это сделать:

<?php
$numbers = [1, 4, 9, 16];
$numbers[5] = 76;
echo $numbers[5];	// 76
?>

Здесь устанавливается элемент с индексом 5. После установки мы можем получать его значение. При этом элемента с индексом 4 по прежнему не существует.

Для добавления нового элемента в массив мы можем, как в примере выше, просто установить новый элемент по еще не установленному индексу. Но есть и другой способ:

<?php
$numbers = [1, 4, 9, 16];
$numbers[] = 25;
echo $numbers[4];	// 25
?>

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

Чтобы получить полное наглядное представление о том, как в конкретном массиве сопоставляются ключи и значения элементов, можно использовать функцию print_r, в которую в качестве параметра передается массив:

<?php
$numbers = [1, 4, 9, 16];
$numbers[] = 25;
print_r($numbers);
?>

Вывод скрипта:

Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )

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

<?php
$numbers[] = 20;
$numbers[] = 120;
$numbers[] = 720;
print_r($numbers);	// Array ( [0] => 20 [1] => 120 [2] => 720 )
?>

Оператор =>

Оператор => позволяет сопоставить ключ с определенным значением. Хотя при определении массива выше нам не требовался подобный оператор, тем не менее мы можем его применять. Например, следующий массив:

$numbers = [1, 4, 9, 16];

Будет аналогичен следующему массиву:

$numbers = [0=>1, 1=>4, 2=>9, 3=>16];
// $numbers = array(0=>1, 1=>4, 2=>9, 3=>16);

Каждый элемент определяется в следующем формате: ключ => значение

В дальнейшем мы также можем обращаться к элементам этого массива.

Этот оператор может понадобится, если мы хотим переопределить порядок индексов. Так, по умолчанию нумеация индексов начинается с нуля и каждый следующий элемент имеет индекс предыдущего элемента + 1. Оператор => же позволяет определить свои индексы вручную для элементов, необязательно с нуля и необязательно по порядку:

$numbers = [1=> 1, 2=> 4, 5=> 25, 4=> 16];
echo $numbers[2];	// 4

Также мы можем задать индекс лишь для одного элемента, тогда для последующих элементов индекс автоматически будет увеличиваться на единиицу:

$numbers = [4=> 16, 25, 36, 49, 64];
print_r($numbers);

В данном случае индексация начинается с числа 4 - это индекс элемента 16. Тогда для элемента 25 индексом будет число 5 и так далее.

Результат:

Array ( [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 )

Перебор массива

Для перебора массива мы можем применять стандартный метод for:

<?php
$users = ["Tom", "Sam", "Bob", "Alice"];
$num = count($users);
for($i=0; $i < $num; $i++)
{
    echo "$users[$i] <br />";
}
?>

В данном случае мы не определяем вручную индексы элементов, поэтому индексация начинается с нуля с увеличением на единиицу для последующего элемента. Поэтому мы можем в цикле через переменную $i передавать индекс, начиная с нуля. Единственная трудность может заключаться в том, как определить индекс конечного элемента, чтобы установить потолок для переменной $i. В этом случае мы можем с помощью встроенной функции count() получить длину массива. Эта функция в качестве параметра принимает массив и возвращает его длину.

Результат работы скрипта:

Tom
Sam
Bob
Alice

Цикл foreach

Тем не менее выше использованный способ перебора не поможет, если индексы определяются вручную и отличаются они от соседних индексов не на единицу, а на произвольную величину. В этом случае мы можем использовать специальный цикл - foreach:

<?php
$users = [1 => "Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"];
foreach($users as $element)
{
    echo "$element<br />";
}
?>

В цикле foreach из массива последовательно извлекаются все элементы, и их значение помещается в переменную, указанную после ключевого слова as. В данном случае в переменную $element по очереди помещаются все четыре значения из массива $users. Когда будет извлечен последний элемент из массива, цикл завершается.

В итоге мы получим тот же результат:

Tom
Sam
Bob
Alice

Цикл foreach позволяет извлекать не только значения, но и ключи элементов:

<?php
$users = [1 => "Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"];
foreach($users as $key => $value)
{
    echo "$key - $value<br />";
}
?>

Здесь при переборе элементов цикла в переменную $key будет передаваться ключ элемента, а в переменную $value - его значение.

Результат работы скрипта:

1 - Tom
4 - Sam
5 - Bob
21 - Alice
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850