Подробное руководство по 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-массивам Если мы хотим отобразить семейное древо Дэвида при помощи многомерного 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 указывает на текущее выбранное значение. Так мы выполняем переборку значений массиваодно за иным.

Результатом работы приведенного выше кода:

davidkevinjulienayyar

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *