Как обратиться к массиву в массиве php

от admin

Как обратиться к массиву в массиве php

В предыдущих примерах рассматривались только одномерные массивы, где значения элементов представляли числа, строки. Но в PHP массивы могут также быть многомерными, то есть такими, где элемент массива сам является массивом.

Например, создадим многомерный массив с помощью функции array() :

Выше определенный многомерный массив $families является двухмерным (частный случай многомерного массива), который можно представить в виде таблицы:

Tom Alice
Bob Kate

Для элементов данного массива не установлены явным образом ключи, поэтому каждый ключ элемента представляет числовой индекс, которые по умолчанию начинаются с нуля. Поэтому чтобы обратиться к первому элементу массива, надо использовать индекс 0 — $families[0] :

Но поскольку элементами массива $families являются вложенные массивы, то чтобы обратиться к элементам внутри этих вложенных массивов, нам необходимо использовать второй индекс — $families[0][0] :

То есть выражение $families[0] представляет обращение к первому элементу массива $families — к вложенному массиву [«Tom», «Alice»] , а выражение $families[0][0] представляет обращение к первому элементу вложенного массива, то есть, в данном случае к элементу «Tom».

Перебор многомерного массива:

Для перебора применяется цикл foreach . Цикл проходит по всем элементам массива $families, передавая каждый элемент в переменную $family :

Однако каждый элемент массива $families, который передается в переменную $family , сам является массивом. И чтобы получить элементы из вложенного массива, применяется вложенный цикл:

В итоге при переборе циклом сформируется таблица:

Также можно определять многомерные ассоциативные массивы:

И при выводе мы получим 3 списка:

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

Чтобы обратиться к элементу данного, также надо указать ключи в квадратных скобках. Например, обратимся к первому элементу в первом массиве. Так как ключ первого массива — «apple», а ключ первого элемента в первом массиве — число 0 (так как мы явным образом не указали ключи):

Подобным образом можно получить второй элемент третьего массива:

Допустим, вложенные массивы также представляют ассоциативные массивы:

Многомерные ассоциативные массивы в PHP и foreach

Получение и изменение элемента в этом массиве:

Выше для инициализации массива применялась функция array() , но также можно использовать и сокращенный вариант с квадратными скобками:

Работа с массивами в PHP

Работа с массивами в PHP

Массив – это тип данных для хранения упорядоченного набора элементов. Каждый элемент в массиве состоит из ключа и значения.

В PHP имеются только упорядоченные ассоциативные массивы. Индексированных массивов в PHP нет.

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

Например, создадим массив, который будет содержать среднюю температуру каждого месяца в году:

Здесь мы создали массив $temperatures, содержащий 12 значений. Каждый элемент в этом массиве имеет ключ. Первый элемент имеет в качестве ключа число 0, второй – число 1, и так далее. Последний элемент имеет в качестве ключа число 11.

Другой вариант создания массивов – это использовать функцию array() :

Создание массива без элементов, то есть пустого массива, в PHP выполняется так:

Обращение к значению массива выполняется посредством ключа, который указывается в квадратных скобках:

В квадратных скобках при необходимости можно указывать выражение, результат вычисления которого будет использоваться в качестве ключа элемента, значение которого нужно получить:

Если мы попытаемся обратиться к элементу, которого нет в массиве, то начиная с PHP 8.0.0, мы получим сообщение об ошибке E_WARNING . При этом в качестве значение будет возвращено null .

Проверить наличия некоторого ключа в массиве можно с помощью функции array_key_exists :

Добавление в массив нового элемента или изменение существующего осуществляется в PHP так:

Здесь мы при добавлении нового элемента в массив не указали ему ключ. В этом случае ключ будет на единицу больше самого большого числового ключа в массиве.

Удаление элемента массива в PHP выполняется с помощью специальной языковой конструкции unset :

С помощью unset вы можете удалить не только отдельный элемент, но и полностью весь массив:

В PHP массиве могут содержаться данные различных типов:

Вывод содержимого массива

Вывести все значения массива на экран можно с помощью функции print_r :

Но чтобы этот вывод был более наглядным лучше это делать внутри тега <pre> :

Вывод содержимого массива с помощью функции print_r в PHP

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

Создание ассоциативных массивов в PHP выполняется с указанием ключа. При этом в качестве ключа могут использоваться как числа, так и строки:

При этом в PHP выполняются следующие преобразования при сохранении ключей:

  • строка ‘7’ будет преобразована в число 7 ; но например ключ ’07’ не будет преобразован, так как он не является корректным числом;
  • число 7.5 , то есть число с плавающей точкой ( float ) будет преобразовано к целому числу, в данном случае к 7 ;
  • true к 1 , а false к 0 ;
  • значение null к пустой строке » .

Если несколько элементов в объявлении массива используют одинаковый ключ, то последний перезапишет предыдущие:

Так как в этом примере все ключи преобразуются к 0 , то каждый следующий элемент будет перезаписывать предыдущий и останется в массиве только один ключ со значением ‘d’ .

Массив в PHP, у которого элементы имеют одинаковые ключи

В одном массиве могут содержаться ключи различных типов, то есть одновременно int и string :

Перебор массивов

Наиболее удобный способ прохождения по массиву в PHP – это использовать конструкцию foreach :

Если нужно только по значениям:

Если ключи массива составляют последовательность, то перебрать такой массив можно с помощью for :

Здесь мы с помощью встроенной функции count() получить длину или другими словами размер массива. Узнать длину массива также можно с помощью sizeof() .

Функцию count также можно использовать для получения последнего элемента массива. Но это повторим только возможно если ключи массива составляют числовую последовательность, начинающуюся с 0 .

Функции для работы с массивами

В PHP очень много различных функций для работы с массивами. Рассмотрим некоторые из них.

Сортировка

Сортировка массива в порядке возрастания осуществляется с помощью функции sort , в порядке убывания посредством rsort .

Для настройки сортировки можно передать в качестве второго аргумента флаг.

Для того чтобы ключи сохранили значения, с которыми они связаны, сортировку массива необходимо выполнять с помощью функции asort . Функция asort сортирует в порядке возрастания, для сортировки в порядке убывания используйте arsort . Эти функции сортируют массив соответственно как sort и rsort , но ключи в отличие от них остаются связанными с такими же значениями.

Например, выведем с помощью ассоциативного массива $students имя студента и соответствующий полученный им балл в порядке их возрастания:

Сортировка массива в PHP, у которого ключи сохранили значения, с которыми они связаны

Массивы в PHP можно сортировать не только по значениям, но и ключам. Для этого используется функция ksort . Для ассоциативного массива $students функция ksort выстроит все элементы в порядке возрастания названий ключей.

Для сортировки в порядке убывания можно использовать krsort :

Перемешивание элементов случайным образом

Если вам нужно перемешать элементы в массиве случайным образом, то можно воспользоваться функцией shuffle :

При этом как вы видите, изначальные ключи теряются и массив превращается в индексируемый.

Выстраивание элементов в обратном порядке

Если вам необходимо создать новый массив, в котором элементы нужно выстроить в обратном порядке, то используйте array_reverse :

Создание нового массива в PHP, в котором элементы выстроены в обратном порядке относительно исходного массива

Работа над массивами как с множествами значений

В PHP имеются функции: array_merge , array_intersect и array_diff . Они позволяют работать с массивами как с множествами значений.

1. Объединение одного или несколько массивов вместе выполняется в PHP с помощью функции array_merge :

Например, объединим с помощью array_merge элементы 3 массивов вместе:

Объединение значений из разных массивов в PHP

Если массивы имеют одинаковые строковые ключи, то более позднее значение этого ключа перезапишет предыдущее. Например, значение ‘green’ ключа ‘color’ перезапишет ‘red’ .

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

Функция array_merge , вызванная без аргументов возвращает пустой массив:

2. Функция array_intersect вычисляет пересечения значений основного массива со значениями других массивов:

В качестве результата оно возвращает массив со значениями основного массива, которые имеются во всех других массивах.

3. Функция array_diff вычисляет разницу между массивами:

Читать:
Почему зависает эксель при копировании

В качестве результата оно возвращает массив со значениями основного массива, которых нет ни в одном из других массивов.

Проверка наличия ключей и значений в массиве

Проверить имеется ли указанное значение в массиве можно с помощью функции in_array :

Здесь, в первый аргумент необходимо передать искомое значение, а во второй – сам массив. В качестве результата in_array возвращает true или false .

Кроме in_array в PHP имеется ещё функция array_search . Она выполняет тоже самое, но в отличие от in_array возвращает ключ этого значения.

Если нужно проверить наличие не значения, а ключа, то можно воспользоваться функцией array_key_exists :

Сериализация

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

Сериализация массива в строку выполняется с помощью функции serialize . Для декодирования строки, содержащей сериализованный массив, обратно в исходный массив используется функция unserialize :

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

Многомерные массивы – это массивы, элементы которого просто содержат другие массивы.

Пример создания двумерного массива:

По сути двумерный массив – это массив массивов. Обращение к элементу массива в этом случае осуществляется с использованием двух квадратных скобок:

Выведем с помощью функции print_r массив $software в форматированном виде:

Использование многомерных массивов в PHP

Элементы массива в PHP могут содержать значения любого типа, такие как числа, строки, объекты. Они также могут содержать и другие массивы, что фактически означает создание многомерного или вложенного массива.

В данном уроке рассматриваются многомерные (вложенные) массивы PHP. Объясняется, как их создать, как ими манипулировать, как организовать цикл по всему многомерному массиву в PHP.

Как создать многомерный массив

Создать многомерный массив можно с помощью конструкции array() , что очень похоже на создание обычного массива. Разница заключается в том, что в многомерном массиве каждый элемент также является массивом.

В выше приведённом примере создаётся двумерный массив. Массив верхнего уровня содержит 3 элемента. Каждый элемент также является массивом, содержащим 3 значения.

Также можно использовать ассоциативный массив в качестве многомерного массива. Следующий пример демонстрирует создание индексированного массива, который содержит 3 ассоциативных массива:

Можно вкладывать массивы один в другой настолько глубоко, насколько нужно (хотя на практике глубина вложенности редко бывает больше 3-х уровней). В примере ниже демонстрируется 3-х мерный массив:

Доступ к элементам в многомерном массиве

Для получения доступа к элементам многомерного массива можно использовать синтаксис «квадратных скобок», который используется для работы с обычным массивом. Если нужно получить доступ к элементам второго уровня в двумерном массиве нужно просто использовать второй набор квадратных скобок, например:

А вот пример, который демонстрирует доступ к различным элементам многомерного массива $movies , который мы создали раньше:

Выполнение кода выдаст следующий результат:

Последний пример использует $movies[0] для организации доступа ко всему вложенному массиву в первом элементе массива верхнего уровня, а затем используется функция print_r() для вывода содержимого массива.

Организация перебора всех элементов многомерного массива в цикле

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

  1. Внешний цикл берет каждый элемент массива верхнего уровня..
  2. Для каждого элемента верхнего уровня внутренний цикл перебирает вложенный массив, и так далее.

В примере создаётся 2-у мерный массив с информацией по фильмам, а затем организуется цикл по элементам массива для вывода информации на страницу:

Выполнение данного кода выдаст следующий результат:

Резюме

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/php-multidimensional-arrays/
Перевел: Сергей Фастунов
Урок создан: 30 Июля 2010
Просмотров: 165416
Правила перепечатки

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 можно успешно создавать и двумерные, и трёхмерные, то есть многомерные массивы. Давайте посмотрим, как с ними работать.

Двумерные массивы в PHP

Двумерный массив в PHP представляет собой массив, хранящий в качестве значений другие массивы. Создаётся он посредством конструктора array() :

Итак, в нашем случае массив $flowers включает в себя 3 массива. Тут следует вспомнить, что для доступа к элементам одномерного массива в PHP следует указывать ключ и имя массива. В случае с двумерными массивами это правило тоже действует, правда, есть исключение: каждый элемент имеет 2 ключа: один для выбора строки, другой для выбора столбца.

Если мы хотим вывести все элементы данного массива, достаточно прописать доступ к каждому элементу вручную. Но, разумеется, будет лучше, если мы сделаем это с помощью вложенных циклов:

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

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

Перебрать массивы, используя цикл for, можно, только когда мы говорим о дочерних массивах. Дело в том, что они, в свою очередь, считаются ассоциативными, поэтому для перебора подойдёт цикл foreach. Также можно выполнить перебор элементов вручную:

Кстати, совсем необязательно применять во время создания двумерного массива конструктор array() — подойдут и квадратные скобки:

Трёхмерные массивы в PHP

Но никто не говорит, что надо ограничиваться лишь 2-мя измерениями: эти массивы тоже могут, в свою очередь, включать в себя новые.

Многомерный (3-мерный) массив характеризуется шириной, высотой и глубиной. Говоря о двумерном массиве, мы представляем таблицу, говоря о многомерном, можно представить слои в этой таблице. И каждый элемент многомерного массива станет ссылаться на слой, столбец и строку.

Давайте изменим «цветочный» массив, переделав его в 3-мерный, то есть превратив в массив массивов:

Так как данный PHP-массив включает в себя лишь числовые индексы, мы можем применять вложенные циклы для его отображения:

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

Похожие статьи