Массивы — способ хранить много похожей информации в одном месте.
Массив проще всего представить как много подписанных коробок при переезде. В каждой коробке может лежать что угодно, например, числа, строки, объекты или даже другие коробки.
Зачем нужны массивы
В массивах хранится информация — например, о том, что лежит в каждой коробке. В коробки можно заглянуть, используя индекс элемента — номер коробки.
Каждая коробка — элемент массива, номер под ней — индекс. То, что лежит внутри коробки — значение элемента.
Как создать массив в PHP
Чтобы создать массив в PHP напишем так:
$my_array = array();
Теперь есть два способа туда что-то добавить. Если мы знаем, на какое место в массиве вставить элемент, используем индекс.
$my_array[1] = "Кухня"
$my_array[2] = "Спальня"
Если мы не знаем конкретные индексы или просто хотим добавить элементы в массив по порядку, нужна такая запись:
$my_array[] = "Кухня"
$my_array[] = "Спальня"
Нумерация в массивах
По умолчанию счёт элементов массива идёт от нуля. То есть при обращении к коробкам нужно помнить, что у первой номер ноль, у второй — 1, и так далее.
Здесь у второго элемента массива номер 1, а значение — 2
Но массиву можно задать любую нумерацию. Допустим, мы хотим записать в массив значения степеней двойки.
$a[2] = 4;
$a[4] = 16;
$a[7] = 128;
var_dump($a);
Этот код создаст массив из трёх элементов, с номерами 2, 4 и 7. Это легко проверить, если запустить его:
array(3) {
[2]=>
int(4)
[4]=>
int(16)
[7]=>
int(128)
}
Ассоциативные массивы в PHP
Это такие же массивы, только у них индекс не число, а строка. Или что угодно ещё. Неудобно подписывать коробки при переезде по номерам — но если написать «Кухня», «Спальня» или «Гостиная», то сразу будет понятно, где что.
Индекс в таком случае называется ключом — можно представить, что коробка закрыта на замок, а знание ключа поможет её открыть.
Возьмём кухонную коробку, в которой лежат ложки, ножи и тарелки. Можно собрать её двумя способами. Так:
$kitchen = array("Spoons"=>"35", "Knifes"=>"3", "Plates"=>"12");
Или так:
$kitchen['Spoons'] = "35";
$kitchen['Knifes'] = "3";
$kitchen['Plates'] = "12";
Тогда если нам нужно будет понять, сколько тарелок лежит в коробке, воспользуемся кодом $kitchen['Plates'];
.
Как вывести массив
Чтобы вывести всё содержимое ассоциативного массива (в нашем случае, кухонной коробки), воспользуемся циклом foreach
, который перебирает все элементы внутри массива.
foreach($kitchen as $item => $item_count) {
echo "Item=" . $item . ", Value=" . $item_count;
}
Ассоциативные массивы можно использовать в вакууме, но мы рассмотрим случаи, когда они используются в настоящих сайтах.
Получаем данные из форм через $_GET
и $_POST
Представьте форму обратной связи на сайте — там есть поле для имени, электропочты и для злого письма о том, что ничего не работает. Когда мы передаём информацию из формы в PHP, она попадает в массивы $_GET
или $_POST
.
$_GET
и $_POST
— тоже ассоциативные массивы. Ключами в них будут имена переданных данных. Смотрите, как просто.
Получение данных через $_POST
Это форма обратной связи с тремя полями. Обратите внимание на атрибуты name
в каждом из полей ввода.
<form action="foo.php" method="post">
<label for="username">Имя:</label>
<input type="text" name="username" id="username">
<label for="email">Email:</label>
<input type="text" name="email" id="email">
<label for="feedback">Отзыв</label>
<input type="textarea" name="feedback" id="feedback"></textarea>
<input type="submit" name="submit" value="Отправь меня!">
</form>
А это код страницы foo.php
на PHP, который выведет данные формы, полученные через POST
. Здесь мы используем те самые значения атрибутов name
, чтобы получить данные из соответствующих полей.
<?php
echo $_POST['username']; // имя пользователя
echo $_POST['email']; // почта
echo $_POST['feedback']; // текст отзыва
?>
То есть username
, email
и feedback
— ключи, которые не отличаются от атрибута name
в форме.
Получение данных через $_GET
Это такая же форма, как выше. Разница в method="get"
— и чуть позже расскажу, в чём ещё.
<form action="foo.php" method="get">
<label for="username">Имя:</label>
<input type="text" name="username" id="username">
<label for="email">Email:</label>
<input type="text" name="email" id="email">
<label for="feedback">Отзыв</label>
<input type="textarea" name="feedback" id="feedback"></textarea>
<input type="submit" name="submit" value="Отправь меня!">
</form>
Код для получения значений формы через $_GET
очень похож на прошлый — нужно заменить POST
на GET
.
<?php
echo $_GET['username'];
echo $_GET['email'];
echo $_GET['feedback'];
?>
Значительная разница в том, что при загрузке страницы с таким кодом, в адресе страницы появятся данные из формы.
С получением данных через GET
и POST
можно поэкспериментировать в первой главе курса «Знакомство с PHP».
Получение массива из базы MySQL
Ещё один частый случай использования ассоциативных массивов — при загрузке данных из базы данных. И если мы храним большую таблицу в базе, то может быть неудобно назначать столбцам номера. А вот чтобы у каждого элемента ключом стал заголовок — хорошая практика, так и запоминать будет удобнее.
Допустим, у нас есть база данных в MySQL, мы подключаемся к ней, делаем запрос и получаем список пользователей.
$dbc = mysqli_connect('localhost', 'root', 'password', 'my_users');
$query = "SELECT first_name FROM members";
$result = mysqli_query($dbc, $query);
$data_array = array();
while ($row = mysqli_fetch_assoc($result)) {
$data_array[$row['name']] = $row['value'];
}
Разбираем код
$dbc = mysqli_connect('localhost', 'root', 'password', 'my_users');
Подключаемся к базе MySQL my_users
по адресу localhost
, от имени пользователя root
, с паролем password
.
$query = "SELECT phone FROM members";
Запрос — получить номера телефонов всех пользователей из таблицы members
.
$result = mysqli_query($dbc, $query);
Делаем запрос к базе с помощью существующей в PHP функции mysqli_query
.
$data_array = array();
Заводим пустой массив для полученных данных.
while ($row = mysqli_fetch_assoc($result)) {
В этой строчке начинаем построчно считывать результаты.
$data_array[$row['name']] = $row['value'];
И если результаты есть, записываем их в ассоциативный массив.
Упражнения с массивами на PHP
Попробуйте тренажёр, где можно без установки PHP, прямо в браузере написать код для реального сайта. И заодно разобраться с массивами, циклами и тем, как работает вся эта магия.