Подробное руководство по PHP-массивам

Сегодня мы рассмотрим массивы. Мы расскажем об их синтаксисе, различных типах, встроенных функциях для работы с массивами. А также приведем практические примеры использования массивов в PHP.

Но прежде я расскажу вам интересную историю.

Рядом с моим офисом есть магазин DVD с отличной подборкой английских фильмов. Владелец магазина не очень образованный человек, но все же он может легко найти нужный фильм среди 20 тысяч дисков. Как он это делает?

Я проанализировал его стратегию. Владелец магазина классифицировал все DVD-диски по разным жанрам, а также указал специальные идентификаторы / коды для разных полок. Он держит похожие фильмы на одних полках. Каждая полка маркируется по названию категории, например, Romantic Movies, Horror Movies и т. д.. Каждый DVD имеет уникальный идентификатор, который можно использовать для отслеживания.

Поэтому, если вы когда-нибудь откроете свой магазин DVD, сделайте следующее:

  • Храните похожие DVD-диски на одной полке.
  • Обозначьте каждую категорию по ее названию.
  • Обозначьте ряды DVD.
  • Назначьте идентификаторы всем DVD-дискам.

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

1. Организуйте данные в различные категории.
2. Определите ряды (строки).
3. Назначьте уникальные идентификаторы для каждого значения данных.

Простое определение массивов: блок, который помогает объединить схожие данные одного и того же типа для лучшей организации и обработки.

Корректное определение массива

«Набор различных переменных с одной меткой, позволяющий организовать значения для их более простой обработки».

Это мое собственное определение массивов. Хотя некоторые определяют их как «переменную, которая содержит в себе другие переменные».

Синтаксис массива:

$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
$colours = array("white","black","blue");
print_r($colours);
/*
вывод будет следующий
Array
(
[0] => white
[1] => black
[2] => blue
)
*/
?>

В приведенном выше коде индексы для white, black и blue соответствуют 0,1,2.Поэтому мы называем такие массивы числовыми.

Ассоциативные массивы

Иногда лучше использовать индексные имена вместо чисел. Например, если вы хотите сохранить имена и номера трех учеников.

<?php
 
$students['Anna'] = 90;
$students['Maria'] = 60;
$students['Jennifer'] = 40;
 
?>

Когда отправляете данные формы с использованием метода POST или GET, вы получаете ассоциативный массив. Попробуйте создать HTML-форму с полями и опубликовать ее, а на странице обработки вывести глобальный массив, например:

print_r($_POST);
print_r($_GET);

и вы получите ассоциативный массив.

Ассоциативные массивы позволяют проще обрабатывать информацию, связанную со сложным представлением данных формы, динамическими значениями из базы данных и т. д.

Многомерные массивы

Многомерный массив может содержать массивы внутри себя, а подмассивы могут включать в себя другие массивы.

Используем пример из реальной жизни. У Дэвида есть два сына — Ричи и Мейсон. У Ричи есть две дочери — Сью и Наташа, в то время как у Мейсона три дочери — Николь, Сальма и Эмбер. Их семейное древо выглядит следующим образом:


Если мы хотим отобразить семейное древо Дэвида с помощью многомерного PHP-массива, то можем определить массив следующим образом:

$david = array
(
“richie”=>array
(
“Sue”,
“Natasha”
),
“Mason”=>array
(
“Nichole”,
“Salma”,
“Amber”
)
);

Можно использовать многомерные массивы для организации данных. Попробуйте отправить массив полей формы, а затем вывести глобальный массив для проверки вывода, и вы получите глобальный многомерный массив, который будет включать в себя другие массивы.

Цикл 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"; 

}
  
?>

Существуют и другие удобные функции для работы с массивами.

Важные функции массива

1) Сохранение вывода функции print_r:

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

<?php
    $myarray = array("Apples", "Oranges", "Pears");
      $output = print_r($myarray, true);
    print $output;
?>

Print_r будет отображать сам массив, если вы не используете TRUE — второй аргумент. Но, если указано TRUE, функция сохраняет вывод в переменной.

2) Как определить размер массива?

Если вы хотите определить количество значений массива, можно использовать функцию COUNT следующим образом:

<?php
    $myarray = array("Apples", "Oranges", "Pears");
    $size = count($myarray);  
    print $size; // 3
?>

Приведенный выше кода выводит 3, потому что в массиве есть три элемента.

3) Функция var_dump:

Это функция, аналогичная print_r(). В основном она делает то же самое, но:

  • выводит размеры переменных;
  • не выводит не публичные данные в объектах;
  • не поддерживает второй параметр для возврата вывода.

Изменив первый скрипт с использованием var_dump(), получим следующий результат:

array(3) {
[0]=>
string(6) “Apples”
[1]=>
string(7) “Oranges”
[2]=>
string(5) “Pears”
} 

Функция var_dump() отобразила, что массив имеет три значения, а также вывела длину каждой строки.

4) Функция 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',
);
?>

5) Функция array_shift:

Она удаляет первый элемент из массива и сохраняет его в переменной.

Например, можно удалить 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];
    }
?>

Это отлично подходит для числовых массивов, которые имеют целочисленные индексы, но не работает для ассоциативных массивов.

Обработка массивов с помощью функции 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";
} 
 
?>

Цель этой статьи — дать представление о массивах и разных методах хранения и обработки информации в массивах. Но если у вас есть вопросы по массивам, пожалуйста, задавайте их в комментариях к этой статье.

Перевод статьи «Detailed Guide On Arrays In PHP» был подготовлен дружной командой проекта Сайтостроение от А до Я