Что такое массив? Если совсем просто — это те же переменные, объединенные под одной «крышей». Или еще одно определение — это переменная с множеством ячеек, т.е. некий такой ящик со множеством отделений, в котором хранятся некие данные.
Давайте сразу разбираться на примерах.
Я сейчас напишу переменную. Какого типа будет эта переменная?
<?php
$data; // Какой тип этой переменной?
?>
У этой переменной будет тип NULL. Хорошо, идем дальше.
Какой тип будет у этой переменной?
<?php
$data = 10; // Тип?
?>
А у этой переменной будет тип INTEGER (число).
А если я напишу так:
<?php
$data[]; // Какой тип?
?>
А здесь будет тип Array или массив PHP. Квадратные скобки после переменной указывают на ячейку этого массива. Соответственно я могу в этот массив записать значения:
<?php
$data[] = ‘Ser’;
$data[] = ‘root’;
$data[] = ‘54321’;
$data[] = 40;
$data[] = true;
?>
Итак, мы получили массив из пяти (5) ячеек. И сразу же применим функцию, которая считает длину массива PHP или количество ячеек в массиве. Называется она count(), в которую передается имя массива:
<?php
$data[] = ‘Ser’;
$data[] = ‘root’;
$data[] = ‘54321’;
$data[] = 40;
$data[] = true;
echo count($data); // 5
?>
К каждой ячейки можно как-то обращаться. Как? Здесь правило такое: когда php «видит», что ячейке присваивается какое-то значение, то он эту ячейку автоматически нумерует, присваивает ей индекс наибольший следующий за наибольшим. Не забываем, что нумерация начинается с нуля. Соответственно, чтобы мне вывести Ser мне нужно записать так:
<?php
$data[] = ‘Ser’;
$data[] = ‘root’;
$data[] = ‘54321’;
$data[] = 40;
$data[] = true;
echo $data[0]; // Ser
?>
Давайте вернемся к определению массива. Я считаю, что лучше всего определять массив PHP, как множество переменных под одной «крышей». Почему? Обратите внимание, если я напишу вот так: echo getType($data) — то мне вернется тип Array (массив), а если я напишу echo getType($data[0]) — мне вернется String (строка). Т.е. $data[0] — это уже самостоятельная переменная. Вот и получается, что массив PHP — это переменные внутри другой переменной.
Я советую немного попрактиковаться с массивами, т.к. это очень важный и сложный тип данных. В основном, когда появляются какие-то связанные логические данные, например данные о пользователи, то никто не громоздит миллион переменных, сразу все данные записываются в массив. Массивов избегать не нужно, без них вы все равно не обойдетесь.
Теперь давайте рассмотрим несколько полезных функций для массивов. Первая функция, которая выводит структуру массива PHP — это функция print_r(имя массива). Чтобы вывести структуру массива, можно записать так: echo print_t(имя массива). У этой функции есть два недостатка — мы не можем увидеть какие типы данных лежат в массиве и она не показывает длину массива. Например 40 — это строка или число? А ведь может быть, что и то или другое.
Так вот, если нужно более подробно рассмотреть массив, то для этого используется другая функция, которая называется var_dump(имя массива). Это тоже самое, что print_r(), только круче. Что делает функция var_dump()? Она показывает, во первых длину массива PHP, во вторых какой тип данных лежит в каждой ячейки.
Идем дальше. Смотрите, я также могу пронумеровать ячейки массива и в ручную:
<?php
$data[0] = ‘Ser’;
$data[1] = ‘root’;
$data[2] = ‘54321’;
$data[3] = 40;
$data[4] = true;
?>
А могу еще и с единицы нумерацию начать:
<?php
$data[1] = ‘Ser’;
$data[2] = ‘root’;
$data[3] = ‘54321’;
$data[4] = 40;
$data[5] = true;
?>
Тогда вопрос. Посмотрите на этот код:
<?php
$data[11] = ‘Ser’;
$data[2] = ‘root’;
$data[] = ‘54321’;
$data[45] = 40;
$data[] = true;
?>
Какие номера будут у пустых ячеек? PHP читает массив сверху вниз, поэтому, когда он подойдет к первой пустой ячейке, наибольшей будет ячейка под номером 11, соответственно первой пустой ячейке он присвоит номер 12. А вот следующая пустая ячейка будет идти за наибольшим номером 45, соответственно второй пустой ячейке он присвоит номер 46. Вот как это будет выглядеть:
<?php
$data[11] = ‘Ser’;
$data[2] = ‘root’;
$data[12] = ‘54321’;
$data[45] = 40;
$data[46] = true;
?>
Обратите внимание, что эти номера или индексы ни на порядок, ни на количество ячеек не повлияли вообще никак. Т.е. получается, что эти индексы — это просто указатель для нас, чтобы мы могли как-то обратиться к данным в этих ячейках.
То как мы сейчас создавали массивы, так они конечно создаются, но создаются редко. Создавать массив можно и другим путем, с помощью функции array(). Сейчас я создам такой же массив PHP, только другим вариантом, каким и нужно делать:
<?php
$data = array();
?>
Этой конструкцией я создал пустой массив. Там нет ни одной ячейки. Теперь, если я хочу создать массив, который я создавал ранее, мне нужно просто записать через запятую значения в скобки:
<?php
$data = array(‘Ser’, ‘root’, ‘54321’, 40, true);
?>
А что если я теперь захочу пронумеровать ячейки массива PHP со значением ‘Ser’ или любую другую? До этого все было просто — в квадратных скобках мы указывали номер. Как быть здесь? А здесь не сложнее, чем было. Всего лишь нужно написать номер перед ячейкой, например 10 и поставить вот такую стрелку =>. Так как PHP позволяет все это записать более красиво, я cделаю вот так:
<?php
$data = array(
10=>’Ser’,
‘root’,
100=>’54321′,
40,
true
);
?>
Давайте представим, что нам необходимо вывести значения элементов массива. Конечно для этого существуют функции, которые мы дальше будем рассматривать. Но прежде чем к ним переходить, я хочу показать вам парочку способов вывода массива PHP, которые вы наверняка где-нибудь встретите.
Итак, опять же, у нас есть вот такой массив:
<?php
$data[‘name’] = ‘Ser’;
$data[‘login’] = ‘root’;
$data[‘password’] = ‘54321’;
$data[‘age’] = 40′;
?>
Предположим, что у этого массива есть некий указатель или курсор, который изначально стоит на первом элементе, то есть на элементе $data[‘name’] = ‘Ser’. Этот указатель или курсор мы, образно говоря, можем передвигать по всему массиву, вследствие чего, мы получаем или выводим значения этого массива. Функция, которая возвращает указатель элемента массива называется current():
<?php
echo current($data); // Выведет Ser
?>
Далее я хочу передвинуться на следующую ячейку и вывести ее значение. Для этого используется функция next():
<?php
echo next($data); // Выведется root
?>
Теперь, если я хочу вывести текущий указатель на массиве, я использую опять current():
<?php
echo next($data); // Выведется root
echo current($data); // Выведет root
?>
Теперь я опять хочу передвинуться, но назад к значению Ser. Для этого мне надо использовать функцию prev():
<?php
echo prev($data); // Выведет Ser
?>
Если я опять после prev($data) напишу current($data), мне выведется Ser.
Для того, чтобы передвинуться в самый низ массива PHP, нужно использовать функцию end():
<?php
echo end($data); // Выведет 40
?>
После того, как мы оказались в самом низу массива, я хочу сразу подняться на его первый уровень. Для этого я использую функцию reset($data).
Давайте обобщим наш код, чтобы было более понятно:
<?php
$data[‘name’] = ‘Ser’;
$data[‘login’] = ‘root’;
$data[‘password’] = ‘54321’;
$data[‘age’] = 40′;
echo current($data); // Ser
echo next($data); // root
echo current($data); // root
echo prev($data); // Ser
echo current($data); // Ser
echo end($data); // 40
echo reset($data); // Ser
?>
Чтобы получить ключ массива, необходимо написать функцию key($data). Функция выведет ключ того элемента массива, на котором мы в данный момент находимся.
То есть, вот таким образом мы можем перемещаться по массиву в разных направлениях.
Собственно так создаются массивы PHP. В дальнейшем мы с вами будем с ними сталкиваться и рассматривать многие функции, которые облегчают нам работу с этими массивами.