Массивы
Ранее мы рассмотрели, как в переменные можно сохранить одиночное значение, например, одно число или одну строку. Но кроме того, мы можем сохранить в переменную набор значений. И для этого используются массивы
.
Есть несколько способов определения массивов. Первый способ представляет использование функции array()
:
$numbers = array();
В данном случае определяется пустой массив $numbers
.
Второй способ представляет использование квадратных скобок []
:
$numbers = [];
При определении массива мы сразу можем передать ему начальные данные. Если применяются квадратные скобки, то элементы массива передаются внутри скобок:
$numbers = [1, 2, 3, 4];
Аналогичное определение массива с помощью функции array()
:
$numbers = array(1, 2, 3, 4);
В качестве элементов массива могут выступать объекты любого типа.
Для обращения к элементам массива применяются ключи
. Ключ может представлять число или строку или одновременно и числа, и строки.
Для обычных массивов ключ представляет число. Числовые ключи еще называют индексами. Нумерация индексов начинается с нуля, то есть первый элемент массива имеет индекс 0, второй элемент - индекс 1 и так далее.
Например, обратимся к третьему элементу массива:
<?
$numbers = [1, 4, 9, 16];
echo $numbers[2]; // 9
Поскольку нумерация индексов начинается с нуля, то чтобы обратиться к третьему элементу, надо использовать индекс 2.
Таким образом мы получаем значение элемента массива. Но также мы можем его изменить:
<?
$numbers = [1, 4, 9, 16];
$numbers[1] = 6;
echo $numbers[1]; // 6
При этом нужно учитывать количество элементов массива. Так, мы не можем обратиться к элементу с несуществующим индексом:
<?
$numbers = [1, 4, 9, 16];
echo $numbers[4]; // 6
В данном случае в массиве $numbers
всего 4 элемента, поэтому индексом последнего элемента будет 3. Таким образом, элемента с индексом 4 в массиве не существует, и при попытке получить его значение echo $numbers[4]
PHP нам покажет предупреждение.
Тем не менее если мы хотим установить элемент по еще не существующему индексу, мы можем это сделать:
<?
$numbers = [1, 4, 9, 16];
$numbers[5] = 76;
echo $numbers[5]; // 76
Здесь устанавливается элемент с индексом 5. После установки мы можем получать его значение. При этом элемента с индексом 4 по прежнему не существует.
Для добавления нового элемента в массив мы можем, как в примере выше, просто установить новый элемент по еще не установленному индексу. Но есть и другой способ:
<?
$numbers = [1, 4, 9, 16];
$numbers[] = 25;
echo $numbers[4]; // 25
При таком способе новый элемент добавляется в конец массив, соответственно здесь, чтобы получить новый элемент, надо использовать индекс 4.
Чтобы получить полное наглядное представление о том, как в конкретном массиве сопоставляются ключи и значения элементов, можно использовать функцию print_r
, в которую в качестве параметра передается массив:
<?
$numbers = [1, 4, 9, 16];
$numbers[] = 25;
print_r($numbers);
Вывод скрипта:
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
Также следует отметить, что необязательно как-то специально инициализровать переменную массива - мы можем по ходу добавлять элементы в массив:
<?
$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
:
<?
$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
Функция print_r
print_r()
выводит пригодную для чтения человеком информацию о переменной. Если задано string
, integer
или float
, печатается само значение. Если задан array
, значения будут представлены в формате с показом ключей и элементов.
<?
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a);
Получим вот такой удобный вывод
Array
(
[a] => apple
[b] => banana
[c] => Array
(
[0] => x
[1] => y
[2] => z
)
)