Обратиться к элементу многомерного массива php
Использование многомерных массивов в PHP
Элементы массива в PHP могут содержать значения любого типа, такие как числа, строки, объекты. Они также могут содержать и другие массивы, что фактически означает создание многомерного или вложенного массива.
В данном уроке рассматриваются многомерные (вложенные) массивы PHP. Объясняется, как их создать, как ими манипулировать, как организовать цикл по всему многомерному массиву в PHP.
Как создать многомерный массив
В выше приведённом примере создаётся двумерный массив. Массив верхнего уровня содержит 3 элемента. Каждый элемент также является массивом, содержащим 3 значения.
Также можно использовать ассоциативный массив в качестве многомерного массива. Следующий пример демонстрирует создание индексированного массива, который содержит 3 ассоциативных массива:
Можно вкладывать массивы один в другой настолько глубоко, насколько нужно (хотя на практике глубина вложенности редко бывает больше 3-х уровней). В примере ниже демонстрируется 3-х мерный массив:
Доступ к элементам в многомерном массиве
Для получения доступа к элементам многомерного массива можно использовать синтаксис “квадратных скобок”, который используется для работы с обычным массивом. Если нужно получить доступ к элементам второго уровня в двумерном массиве нужно просто использовать второй набор квадратных скобок, например:
Выполнение кода выдаст следующий результат:
Организация перебора всех элементов многомерного массива в цикле
В примере создаётся 2-у мерный массив с информацией по фильмам, а затем организуется цикл по элементам массива для вывода информации на страницу:
Выполнение данного кода выдаст следующий результат:
Резюме
Многомерные массивы подходят для хранения любых данных, например, для хранения множественных записей баз данных или значений для отображения в таблицах. Использование многомерных массивов может повысить уровень функциональности скриптов PHP.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/php-multidimensional-arrays/
Перевел: Сергей Фастунов
Урок создан: 30 Июля 2010
Просмотров: 157310
Правила перепечатки
5 последних уроков рубрики “PHP”
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза “фильтруйте всё, экранируйте всё” всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Массивы в PHP
Что такое массив
Например, так можно объявить массив с тремя значениями:
Массивы также отлично подходят для объединения нескольких связанных между собой значений, например характеристик товара:
Создание массива
Для создания пустого массива просто укажите квадратные скобки вместо значения:
Результат в браузере:
PHP сообщает нам, что в переменной лежит массив (англ. array), в котором находится 0 значений.
Чтобы объявить массив с данными, просто перечислите значения в квадратных скобках:
Создание массивов с помощью квадратных скобок работает начиная с версии PHP 5.4. До этого использовался более громоздкий синтаксис:
Ключи и значения массива
Массив состоит из ключей (индексов) и соответствующих им значений. Это можно представить как таблицу:
| Ключ | Значение |
|---|---|
| 0 | Samsung |
| 1 | Apple |
| 2 | Nokia |
У каждого значения есть свой ключ. В массиве не может быть несколько одинаковых ключей.
Вернёмся к предыдущему примеру и посмотрим, что лежит в массиве:
Результат в браузере:
Когда мы создаём массив без указания ключей, PHP генерирует их автоматически в виде чисел, начиная с 0.
Указание ключей происходит с помощью конструкции => :
Простые и ассоциативные массивы
Когда мы создаём массив с числовыми ключами, такой массив называется простым или числовым.
Вывод массива
Вывод элементов массива выглядит следующим образом:
Однако обе функции выводят информацию на одной строке, что в случае с массивами превращается в кашу. Чтобы этого не происходило, используйте тег ‘;
Результат в браузере:
Также вывести содержимое массива можно с помощью цикла foreach:
Подробней работу цикла foreach мы разберём в отдельном уроке.
Добавление и удаление элементов
Добавление новых элементов в массив выглядит следующим образом:
Но если название ключа не играет роли, его можно опустить:
Удалить элемент массива можно с помощью функции unset() :
Двумерные и многомерные массивы
В качестве значения массива мы можем передать ещё один массив:
Обратиться к элементу многомерного массива можно так:
Теперь мы можем хранить в одном массиве целую базу товаров:
Или альтернативный вариант:
Задача 1
Задача 2
2. Создайте подмассив streets с любыми случайными улицами. Каждая улица должна иметь имя (name) и количество домов (buildings_count), а также подмассив из номеров домов (old_buildings), подлежащих сносу.
Обратиться к элементу многомерного массива php
Существует два типа массивов, различающиеся по способу идентификации элементов.
1. В массивах первого типа элемент определяется индексом в последовательности. Такие массивы называются простыми массивами.
2. Массивы второго типа имеют ассоциативную природу, и для обращения к элементам используются ключи, логически связанные со значениями. Такие массивы называют ассоциативными массивами.
Важной особенностью PHP является то, что PHP, в отличие от других языков, позволяет создавать массивы любой сложности непосредственно в теле программы (скрипта).
Простые массивы и списки в PHP
При обращении к элементам используется целочисленный индекс, определяющий позицию заданного элемента.
Обобщенный синтаксис элементов простого одномерного массива:
Доступ к элементам простых массивов (списков) осуществляется следующим образом:
С технической точки зрения разницы между простыми массивами и списками нет.
Простые массивы можно создавать, не указывая индекс нового элемента массива, это за вас сделает PHP. Вот пример:
В рассмотренном примере вы можете добавлять элементы массива names простым способом, то есть не указывая индекс элемента массива:
Новый элемент простого массива (списка) будет добавлен в конец массива. В дальнейшем, с каждым новым элементом массива, индекс будет увеличиваться на единицу.
Обобщенный синтаксис элементов многомерного простого массива:
Пример простого многомерного массива:
php
// Многомерный простой массив:
$ arr [ 0 ][ 0 ]= “Овощи” ;
$ arr [ 0 ][ 1 ]= “Фрукты” ;
$ arr [ 1 ][ 0 ]= “Абрикос” ;
$ arr [ 1 ][ 1 ]= “Апельсин” ;
$ arr [ 1 ][ 2 ]= “Банан” ;
$ arr [ 2 ][ 0 ]= “Огурец” ;
$ arr [ 2 ][ 1 ]= “Помидор” ;
$ arr [ 2 ][ 2 ]= “Тыква” ;
// Выводим элементы массива:
echo “
Ассоциативные массивы в PHP
В PHP индексом массива может быть не только число, но и строка. Причем на такую строку не накладываются никакие ограничения: она может содержать пробелы, длина такой строки может быть любой.
Ассоциативные массивы особенно удобны в ситуациях, когда элементы массива удобнее связывать со словами, а не с числами.
Одномерные ассоциативные массивы содержат только один ключ (элемент), соответствующий конкретному индексу ассоциативного массива. Приведем пример:
Доступ к элементам одномерных ассоциативных массивов осуществляется так же, как и к элементам обыкновенных массивов, и называется :
Многомерные ассоциативные массивы могут содержать несколько ключей, соответствующих конкретному индексу ассоциативного массива. Рассмотрим пример многомерного ассоциативного массива:
Многомерные массивы похожи на записи в языке Pascal или структуры в языке C.
Доступ к элементам многомерного ассоциативного массива осуществляется следующим образом:
Как вы уже заметили, для создания многомерного ассоциативного массива мы использовали специальную функцию array, мы ее рассмотрим позже, когда будем рассматривать операции над массивами.
Ассоциативные многомерные массивы можно создавать и классическим способом, хотя это не так удобно:
Основы работы с массивами в PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела “Важное”, которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
А теперь представьте, что вам нужно вывести на экран название третьего месяца. С помощью 12-ти различных переменных это было бы проблематично, так как вам необходимо помнить названия всех переменных, в которые вы записали имена месяцев.
Поэтому для таких вещей был изобретен специальный тип данных. Он называется массив.
Массив создается с помощью функции []:
Пока созданный нами массив не содержит никаких данных. Заполним его названиями дней недели (для краткости пишу две буквы каждого дня):
Каждое значение списка, который мы записали в массив (в нашем случае каждый день недели), называется элементом массива.
Элементы разделяются между собой запятой. После этой запятой можно ставить пробелы, а можно и не ставить.
Обратите внимание на то, что названия дней недели представляют собой строки и поэтому взяты в кавычки. Кроме строк в массиве можно хранить числа, и их в кавычки мы не берем:
Посмотреть содержимое массива с помощью echo мы, увы, не сможем. Попробуйте сделать так:
Вы увидите на экране слово Array вместо содержимого массива.
Для того, чтобы PHP вывел нам все элементы массива, нужно воспользоваться функцией var_dump:
Вот теперь мы действительно увидим все элементы нашего массива.
Запомните этот момент: для того, чтобы узнать, какие именно элементы хранятся в массиве, мы должны пользоваться функцией var_dump, а не echo.
Как вывести отдельный элемент массива
Итак, массив месяцев мы составили и даже научились смотреть на него функцией var_dump. Однако, полезного пока мало, так как var_dump используется для отладки кода и выводит весь массив целиком.
Предположим, мы хотим вывести на экран среду.
Посмотрите и повторите пример:
Ассоциативный массив
Чтобы обратиться к нужному элементу массива, мы писали в квадратных скобках его порядковый номер (нумерация начинается с нуля, если вы уже забыли). Эти порядковые номера называются ключами массива. То есть мы получали значение элемента массива по его ключу.
Поэтому в PHP можно указать ключи в явном виде – так, как нам нужно. Сделаем так, чтобы понедельник имел ключ 1, а не ноль, как было раньше (и всем остальным дням прибавим единицу):
Синтаксис здесь такой: ключ, затем идет стрелка =>, а потом значение.
Узнаем зарплату Васи:
Массивы, у которых явно указаны ключи, называются ассоциативными.
Хитрость с ключами
Когда мы делали ассоциативный массив дней недели, нам приходилось расставлять все ключи вручную. И все для того, чтобы нумерация началась не с нуля, а с единицы. Это было немного неудобно.
Напомню вам этот массив:
Если у второго элемента не будет ключа, PHP поставит его автоматически, причем следующий по порядку.
А следующим номером будет как раз-таки число 2, так как предыдущий элемент имел ключ 1 (неважно, что мы сами его поставили, а не PHP автоматически).
Давайте поправим наш массив:
Как еще можно создать массив
Объявление массива с помощью команды [] не является единственным способом его создания.
Можно просто присвоить значения элементам массива, не объявляя его через array (PHP нас поймет и сам создаст массив):
Естественно, ключи могут быть не только числовыми, но и текстовыми:
Кроме того, можно сделать так, что PHP сам добавит ключи (начиная с нуля и так далее). Для этого мы оставим квадратные скобки пустыми: $a[] = 1, а PHP сам добавит ключ. Пример:
Все способы создания массива
Итак, повторим все способы создания массива:
Многомерный массив
Элементы массива могут быть не только строками и числами, но и массивами. То есть у нас получится массив массивов или многомерный массив.
Давайте сделаем массив студентов $students, который будет содержать два подмассива: студенты мужского пола и женского:
Чтобы вывести какой-либо элемент из многомерного массива следует писать уже не одну пару [ ], а две: $a[‘boys’][0] – так мы выведем ‘Коля’.
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
Массивы в php
Организация массива
Как писалось выше, массив состоит из элементов, каждый из которых имеет ключ и значение. Например массив содержащий информацию о ценах в ресторанном меню может выглядеть так:
| Ключ | Значение |
|---|---|
| 0 | 700 |
| 1 | 1500 |
| 2 | 1100 |
Рассмотрим пример:
В первом случае элементы массива представляют из себя пару ключ-значение, где в качестве ключа используются строковые названия «блюд» (приёмов пищи на самом деле, но пусть будет блюд), а значение это цена блюда. Во втором же случае я указал только цены, при этом интерпретатор PHP автоматически проставит ключи элементам массива.
Операции с массивами
Один из случаев ключевой операции с массивами, а именно его создание мы рассмотрели выше. А как ещё можно создать массив? Самый простой случай, это создание пустого массива:
Создание и модификация массива
Пустой массив может служить заготовкой под определённую коллекцию данных. Конечно его можно не определять заранее и создать прямо в цикле где он должен заполняться, но тогда это будет менее понятный код.
Вы так же можете заполнить массив на лету, например данными из базы данных:
Перебор массивов
С другой стороны готовый массив можно перебрать и например вывести его элементы на экран:
Вообще в php существует больше 70 функций для работы с массивами, однако в большинстве случаев вы будет использовать не больше двадцати. Приведу некоторые из них:
Сортировка массива
В результате выполнения данного примера получим такой массив:
Вы так же можете пробросить в тело функции compare() внешнюю переменную используя анонимную функцию и ключевое слово use :
Глобальные массивы
Многомерные массивы
Как вы уже знаете, элементы массива могут содержать в качестве значения данные любого типа, строки, числа, логические, в том числе и другие массивы. Массив состоящий из других массивов называется многомерным или вложенным массивом. На практике используется 2-3 уровня вложенности для хранения каких-либо связанных структурных данных (например данных о покупателях магазина или каталоге товаров), обработка массивов большей вложенности усложняется и используется не часто.
Давайте разберёмся как создавать и взаимодействовать с многомерными массивами.
Создание многомерных массивов
В первую очередь создадим простой двумерный массив сотрудников организации:
Обратите внимание что в «родительском» массиве мы не указывали символьных ключей, поэтому массивам внутри были просто присвоены числовые индексы 0, 1, 2. Давайте теперь распределим наших сотрудников по отделам и добавим ещё одного сотрудника.
Теперь мы имеем многомерный массив в котором на «первом уровне» хранятся отделы компании, а уже внутри отделов сотрудники. При этом отдел имеет символьный ключ, например DEPARTMENT_IT — отдел IT. Немного усложним наш пример и добавим информацию о наименовании отделов и времени работы, а сотрудников отдела поместим на уровень ниже:
Как видите используя многомерные массивы можно строить довольно сложные структуры данных с которыми в последствии предстоит работать нашему веб-приложению.
Доступ к элементам многомерного массива
Рассмотрим как получить доступ к элементам многомерного массива. В качестве примера возьмём выше описанные массивы сотрудников компании. Но перед этим предлагаю набросать небольшую функцию, которая позволит удобно просматривать содержимое переменных в вашем коде. Я часто использую её в работе:
И так, давайте узнаем имена и возраст всех сотрудников из первого двумерного массива:
Получим такую страницу:
Таким образом можно вывести например страницу контактов сайта, на которой должны быть «координаты» должностных лиц отвечающих за то или иное направление деятельности компании. Оформление сами понимаете зависит от вашей фантазии и дизайна сайта.
Обработка многомерного массива
Один из примеров обработки массива был представлен выше, когда мы просто вывели на экран содержимое многомерного массива в удобном для пользователя виде. Однако это далеко не всё что можно делать с массивами. Например мы можешь осуществить некий поиск по элементам узнать сколько сотрудников старше 30 лет работает в нашей компании:
Существует множество примеров обработки массивов в PHP, но они выходят за рамки данной статьи.
