Массивы в PHP - подробное руководство
Сегодня мы рассмотрим массивы в PHP. Мы расскажем об их синтаксисе, различных типах, встроенных функциях для работы с массивами. А также приведем практические примеры того как можно использовать массивы в PHP.
Но прежде я расскажу вам интересную историю.
Рядом с моим офисом есть магазин DVD с отличной подборкой английских фильмов. Владелец магазина не очень образованный человек, но все же он может легко найти нужный фильм среди 20 тысяч дисков. Как он это делает?
Я проанализировал его стратегию. Владелец магазина классифицировал все DVD-диски по разным жанрам, а также указал специальные идентификаторы / коды для разных полок. Он держит похожие фильмы на одних полках. Каждая полка маркируется по названию категории, например, Romantic Movies, Horror Movies и т. д.. Каждый DVD имеет уникальный идентификатор, который можно использовать для отслеживания.
Поэтому, если вы когда-нибудь откроете свой магазин DVD, сделайте следующее:
- Храните похожие DVD-диски на одной полке.
- Обозначьте каждую категорию по ее названию.
- Обозначьте ряды DVD.
- Назначьте идентификаторы всем DVD-дискам.
Теперь о морали этой истории, которая позволит нам вернуться к миру компьютеров.
Иногда в программировании нужно обрабатывать связанные значения, которые соотносятся друг с другом по-разному. Например, имена пяти лучших учеников, модели автомобилей Porsche, переменные, представленные в определенной форме и т. д. В таких случаях необходимо организовать код и логику для эффективного и быстрого управления ими. Для этого можно использовать логику продавца DVD:
1. Организуйте данные в различные категории.
2. Определите ряды (строки).
3. Назначьте уникальные идентификаторы для каждого значения данных.
Простое определение массивов: блок, который помогает объединить схожие данные одного и того же типа для лучшей организации и обработки.
Массивы в PHP - корректное определение
"Набор различных переменных с одной меткой, позволяющий организовать значения для их более простой обработки".
Это мое собственное определение массивов. Хотя некоторые определяют их как «переменную, которая содержит в себе другие переменные».
Синтаксис массива PHP:
$arrayName = array (”value1?,”value2?,”value3?);
Мы используем символ $, чтобы задать имя массива. После этого идет знак равенства, а затем ключевое слово «array». Оно сообщает парсеру, что мы работаем с массивом.
Затем идут значения в круглых скобках, и каждое из них заключено в двойные кавычки и разделено запятой.
Пример того как определяются и выводятся массивы в PHP:
<?php
$Top3Sites = array ("fastcreators.com","howtoforge.com","scriptsbible.com");
print_r($Top3Sites);
?>
Результат приведенной выше программы будет следующим:
Array
(
[0] => fastcreators.com
[1] => howtoforge.com
[2] => scriptsbible.com
)
Мы используем print_r, потому что нельзя вывести массив с помощью функции echo или print. Хотя можно использовать их для отображения отдельных элементов из массива. Например:
echo $Top3Sites[0]; //fastcreators.com
Помните, что номер индекса начинается с 0, а не 1.
Каждое значение массива получает уникальный идентификатор, который известен как INDEX NUMBER.
Еще одним способом может быть определение трех переменных, присвоение им значений и использование разных операторов для их отображения. Это может быть приемлемым в случае трех значений, принимаемых аргументом. Но не подходит, когда мы имеем дело с полусотней или сотнями значений.
В приведенном выше примере мы определили массив и присвоили ему значения за один шаг. Хотя можно сделать это следующим образом:
<?php
$students = array(); //только определяем массив
//присвоение значений
$students[0] = "Haroon";
$students[1] = "Celine";
$students[3] = "Jennifer";
$students[4] = "Bobby";
?>
Массивы в PHP - основные типы
В PHP существует три типа массивов:
- Числовой массив PHP: массив с числовым ключом идентификатора.
- Ассоциативный массив PHP: массив, в котором каждый ключ идентификатора связан со значением.
- Многомерный массив PHP: массив, состоящий из одного или нескольких массивов.
Числовые массивы используют целое число в качестве номера индекса для идентификации каждого элемента. Примеры, которые мы рассматривали выше, это числовые массивы.В них в качестве индекса используются целочисленные значения.
<?php
$colours = array("white","black","blue");
print_r($colours);
/*
вывод будет следующий
Array
(
[0] => white
[1] => black
[2] => blue
)
*/
?>
В приведенном выше коде индексы для white, black и blue соответствуют 0,1,2.Поэтому мы называем такие массивы числовыми.
Ассоциативный массив PHP
Иногда лучше использовать индексные имена вместо чисел. Например, если вы хотите сохранить имена и номера трех учеников.
<?php
$students['Anna'] = 90;
$students['Maria'] = 60;
$students['Jennifer'] = 40;
?>
Когда отправляете данные формы с использованием метода POST или GET, вы получаете ассоциативный массив. Попробуйте создать HTML-форму с полями и опубликовать ее, а на странице обработки вывести глобальный массив, например:
print_r($_POST);
print_r($_GET);
и вы получите ассоциативный массив.
Ассоциативные массивы позволяют проще обрабатывать информацию, связанную со сложным представлением данных формы, динамическими значениями из базы данных и т. д.
Многомерный массив PHP
Многомерный массив PHP может содержать массивы внутри себя, а подмассивы могут включать в себя другие массивы.
Используем пример из реальной жизни. У Дэвида есть два сына - Ричи и Мейсон. У Ричи есть две дочери - Сью и Наташа, в то время как у Мейсона три дочери - Николь, Сальма и Эмбер. Их семейное древо выглядит следующим образом:

Если мы хотим отобразить семейное древо Дэвида используя многомерный массив PHP, то можем определить массив следующим образом:
$david = array
(
“richie”=>array
(
“Sue”,
“Natasha”
),
“Mason”=>array
(
“Nichole”,
“Salma”,
“Amber”
)
);
Можно использовать многомерные массивы для организации данных. Попробуйте отправить массив полей формы, а затем вывести глобальный массив для проверки вывода, и вы получите глобальный многомерный массив, который будет включать в себя другие массивы.
Изучаем PHP: работа с массивами-цикл FOREACH
Цикл FOREACH используется, чтобы принимать каждое последующее значение массива и выполнять с ним требуемые действия.
Основной синтаксис цикла FOREACH следующий:
foreach( $arraynameas $temporaryVarName ) {
// тело цикла foreach
//$temporaryVarName содержит значения массива и
//при каждой следующей итерации принимает следующее доступное значение из массива
}
Напишем программу, используя цикл FOREACH:
<?php
$students = array(); // define array students
//присвоение значений
$students[0] = "david";
$students[1] = "kevin";
$students[2] = "julie";
$students[3] = "nayyar";
/*
теперь мы используем цикл foreach, чтобы вывести имена всех студентов, то есть массив значений
*/
foreach( $studentsas $std_name ) {
echo $std_name . "n";
}
?>
$std_name выполняет роль переменной, которая принимает значение массива. При каждом запуске цикла следующее значение массива перезаписывает существующее значение $std_name, и $std_name указывает на текущее выбранное значение. Так мы выполняем переборку значений массиваодно за другим.
Результатом работы приведенного выше кода:
david
kevin
julie
nayyar
Цикл FOREACH завершается при достижении последнего значения в массиве. В нашем случае это значение NAYYAR.
Вы можете прервать цикл в любое время с помощью оператора break. Например, когда обрабатывается имя julie, вы можете включить в приведенный выше код оператор IF, как показано ниже:
<?php
foreach( $studentsas $std_name ) {
if($std_name == "julie") break;
echo $std_name . "n";
}
?>
Существуют и другие удобные функции для работы с массивами.
Массивы в PHP - функции работы с массивами
Сохранение вывода функции print_r
Ранее мы использовали print_r для отображения значений массива. Но можно добавить к print_r дополнительный аргумент и сохранить результат в переменной. Например:
<?php
$myarray = array("Apples", "Oranges", "Pears");
$output = print_r($myarray, true);
print $output;
?>
Print_r будет отображать сам массив, если вы не используете TRUE - второй аргумент. Но, если указано TRUE, функция сохраняет вывод в переменной.
Как определить в php размер массива?
Если вы хотите определить php количество элементов в массиве, можно использовать функцию COUNT следующим образом:
<?php
$myarray = array("Apples", "Oranges", "Pears");
$size = count($myarray);
print $size; // 3
?>
Приведенный выше кода выводит 3, потому что в массиве есть три элемента.
Функция var_dump
Это функция, аналогичная print_r(). В основном она делает то же самое, но:
- выводит размеры переменных;
- не выводит не публичные данные в объектах;
- не поддерживает второй параметр для возврата вывода.
Изменив первый скрипт с использованием var_dump(), получим следующий результат:
array(3) {
[0]=>
string(6) “Apples”
[1]=>
string(7) “Oranges”
[2]=>
string(5) “Pears”
}
Функция var_dump() отобразила, что массив имеет три значения, а также вывела длину каждой строки.
Функция var_export
Существует функция var_export(), которая похожа на var_dump() и print_r(). Она отличается тем, что выводит информацию о переменной в виде результата, который может использоваться в качестве PHP- кода. Например, если бы мы использовали var_export() вместо print_r (), то получили бы следующее:
array (
0 => ‘Apples’,
1 => ‘Oranges’,
2 => ‘Pears’,
)
Обратите внимание, что после последнего элемента добавляется дополнительная запятая. Но она игнорируется PHP, и вы можете скопировать и вставить эту информацию непосредственно в свои скрипты:
<?php
$foo = array (
0 => 'Apples',
1 => 'Oranges',
2 => 'Pears',
);
?>
Функция array shift PHP
Она удаляет первый элемент из массива и сохраняет его в переменной.
Например, можно удалить Apples из массива, используемого в предыдущих примерах, и сохранить это значение в другой переменной:
<?php
$myarray = array("Apples", "Oranges", "Pears");
$fruit = array_shift($myarray);
echo $fruit; // Apples
print_r($myarray); // Oranges and Pears will bedisplayedwithout Apples
?>
Это удобная функция, если есть многомерный массив, переданный из формы, и вы хотите получить под матрицу из основного массива. Но когда вы выбираете под матрицу из основного массива с помощью array_shift, принимающие переменные ($fruit в предыдущем примере) будут массивом.
Я также предлагаю вам изучить другие полезные функции, связанные с array_shift:
- array_unshift
- array_pop
- array_push
Также я хочу отметить, что цикл FOREACH - не единственный способ обработки массивов. Это можно сделать с помощью цикла FOR или функций list() и each().
Для обработки массива нужно определить размер массива, как показано ниже:
<?php
for ($i = 0; $i <count($array); ++$i) {
print $array[$i];
}
?>
Это отлично подходит для числовых массивов, которые имеют целочисленные индексы, но не работает для ассоциативных массивов.
PHP перебор массива с помощью функции list()
PHP предлагает функцию list(), которая позволяет легко и быстро перебирать значения массива:
<?php
while (list($var, $val) = each($array)) {
print "$var is $valn";
}
?>
List() - это функция, которая противоположна функции array(). Она принимает массив и преобразует его в отдельные переменные. Each() принимает массив в качестве параметра, возвращает текущий ключ и значение в этом массиве, прежде чем переместить курсор массива. «Курсора массива» - это технический термин, обозначающий элемент массива, который в настоящее время считывается.
Все массивы имеют курсор. Его можно свободно перемещать. Курсор используется в цикле while в примере, приведенном выше. Сначала each() возвращает первый элемент, затем второй элемент, третий и т. д., пока не определит, что элементов больше не осталось. Тогда функция вернет значение false и завершит цикл.
Смысл первой строки - «получить текущий элемент в массиве и присвоить его ключ переменной $var, а его значение - переменной $val, и затем передвинуть курсор массива дальше».
Получение индекса и его значения
Если вы хотите считать имя индекса и его значение для каждого элемента массива, используйте цикл FOREACH следующим образом:
<?php
foreach ($array as $key => $val) {
print "$key = $valn";
}
?>
Цель этой статьи - дать представление о массивах и разных методах хранения и обработки информации в массивах. Но если у вас есть вопросы по массивам, пожалуйста, задавайте их в комментариях к этой статье.