Массивы в php
Организация массива
Как писалось выше, массив состоит из элементов, каждый из которых имеет ключ и значение. Например массив содержащий информацию о ценах в ресторанном меню может выглядеть так:
| Ключ | Значение |
|---|---|
| 0 | 700 |
| 1 | 1500 |
| 2 | 1100 |
Рассмотрим пример:
В первом случае элементы массива представляют из себя пару ключ-значение, где в качестве ключа используются строковые названия «блюд» (приёмов пищи на самом деле, но пусть будет блюд), а значение это цена блюда. Во втором же случае я указал только цены, при этом интерпретатор PHP автоматически проставит ключи элементам массива.
Операции с массивами
Один из случаев ключевой операции с массивами, а именно его создание мы рассмотрели выше. А как ещё можно создать массив? Самый простой случай, это создание пустого массива:
Создание и модификация массива
Пустой массив может служить заготовкой под определённую коллекцию данных. Конечно его можно не определять заранее и создать прямо в цикле где он должен заполняться, но тогда это будет менее понятный код.
Вы так же можете заполнить массив на лету, например данными из базы данных:
Перебор массивов
С другой стороны готовый массив можно перебрать и например вывести его элементы на экран:
Вообще в php существует больше 70 функций для работы с массивами, однако в большинстве случаев вы будет использовать не больше двадцати. Приведу некоторые из них:
Сортировка массива
В результате выполнения данного примера получим такой массив:
Вы так же можете пробросить в тело функции compare() внешнюю переменную используя анонимную функцию и ключевое слово use :
Глобальные массивы
Многомерные массивы
Как вы уже знаете, элементы массива могут содержать в качестве значения данные любого типа, строки, числа, логические, в том числе и другие массивы. Массив состоящий из других массивов называется многомерным или вложенным массивом. На практике используется 2-3 уровня вложенности для хранения каких-либо связанных структурных данных (например данных о покупателях магазина или каталоге товаров), обработка массивов большей вложенности усложняется и используется не часто.
Давайте разберёмся как создавать и взаимодействовать с многомерными массивами.
Создание многомерных массивов
В первую очередь создадим простой двумерный массив сотрудников организации:
Обратите внимание что в «родительском» массиве мы не указывали символьных ключей, поэтому массивам внутри были просто присвоены числовые индексы 0, 1, 2. Давайте теперь распределим наших сотрудников по отделам и добавим ещё одного сотрудника.
Теперь мы имеем многомерный массив в котором на «первом уровне» хранятся отделы компании, а уже внутри отделов сотрудники. При этом отдел имеет символьный ключ, например DEPARTMENT_IT — отдел IT. Немного усложним наш пример и добавим информацию о наименовании отделов и времени работы, а сотрудников отдела поместим на уровень ниже:
Как видите используя многомерные массивы можно строить довольно сложные структуры данных с которыми в последствии предстоит работать нашему веб-приложению.
Доступ к элементам многомерного массива
Рассмотрим как получить доступ к элементам многомерного массива. В качестве примера возьмём выше описанные массивы сотрудников компании. Но перед этим предлагаю набросать небольшую функцию, которая позволит удобно просматривать содержимое переменных в вашем коде. Я часто использую её в работе:
И так, давайте узнаем имена и возраст всех сотрудников из первого двумерного массива:
Получим такую страницу: 
Таким образом можно вывести например страницу контактов сайта, на которой должны быть «координаты» должностных лиц отвечающих за то или иное направление деятельности компании. Оформление сами понимаете зависит от вашей фантазии и дизайна сайта.
Обработка многомерного массива
Один из примеров обработки массива был представлен выше, когда мы просто вывели на экран содержимое многомерного массива в удобном для пользователя виде. Однако это далеко не всё что можно делать с массивами. Например мы можешь осуществить некий поиск по элементам узнать сколько сотрудников старше 30 лет работает в нашей компании:
Существует множество примеров обработки массивов в PHP, но они выходят за рамки данной статьи.
Использование многомерных массивов в PHP
Элементы массива в PHP могут содержать значения любого типа, такие как числа, строки, объекты. Они также могут содержать и другие массивы, что фактически означает создание многомерного или вложенного массива.
В данном уроке рассматриваются многомерные (вложенные) массивы PHP. Объясняется, как их создать, как ими манипулировать, как организовать цикл по всему многомерному массиву в PHP.
Как создать многомерный массив
В выше приведённом примере создаётся двумерный массив. Массив верхнего уровня содержит 3 элемента. Каждый элемент также является массивом, содержащим 3 значения.
Также можно использовать ассоциативный массив в качестве многомерного массива. Следующий пример демонстрирует создание индексированного массива, который содержит 3 ассоциативных массива:
Можно вкладывать массивы один в другой настолько глубоко, насколько нужно (хотя на практике глубина вложенности редко бывает больше 3-х уровней). В примере ниже демонстрируется 3-х мерный массив:
Доступ к элементам в многомерном массиве
Для получения доступа к элементам многомерного массива можно использовать синтаксис «квадратных скобок», который используется для работы с обычным массивом. Если нужно получить доступ к элементам второго уровня в двумерном массиве нужно просто использовать второй набор квадратных скобок, например:
Выполнение кода выдаст следующий результат:
Организация перебора всех элементов многомерного массива в цикле
В примере создаётся 2-у мерный массив с информацией по фильмам, а затем организуется цикл по элементам массива для вывода информации на страницу:
Выполнение данного кода выдаст следующий результат:
Резюме
Многомерные массивы подходят для хранения любых данных, например, для хранения множественных записей баз данных или значений для отображения в таблицах. Использование многомерных массивов может повысить уровень функциональности скриптов PHP.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/php-multidimensional-arrays/
Перевел: Сергей Фастунов
Урок создан: 30 Июля 2010
Просмотров: 158323
Правила перепечатки
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 нет многомерных массивов
Теоретически не ограничен
100
10
15. С помощью какой функции можно проверить, является ли переменная массивом?
а) in_array
б) is_array
в) isset
г) array_search
Только г
Только а и г
Только а и б
Только б и в
Только в
* Только б
Только в и г
Только а
16. Как преобразовать значение переменной в целое число?
is_int
floatval
unset
* intval
17. С помощью какой инструкции функция может вернуть значение?
input
return
output
exit
18.Найдите ошибку в данном коде:
19. Как вывести на экран определенную ниже константу:
20. С помощью какой конструкции можно подключить файл в php?
а) include
б) include_once
в) include_php
г) include_file
д) require
ж) require_once
только д
только в
всех
* а, б, д, ж
только а
а, б, в, г
21. В каком случае на экран будет выведен текст «Версия Битрикс 12»?
Только б
В обоих
Ни в одном
Только а
22. Что означает такое объявление функции:
Функция не принимает значения и инициализирует сразу две переменные
Функция имеет необязательные параметры и объявлены значения по умолчанию
Не корректная форма записи
Функция работает, только если ей переданы параметры get_sum(10, 5)
23. Есть код:
Что у нас будет выведено в результате работы кода?
* 15
5
510
10
24. В каком варианте правильно объявляется массив?
Только в и г
Только б и г
Только б
Только а
Только г
Только а и в
Только в
Только а и б
25. Требуется ли в PHP в обязательном порядке объявлять тип переменной?
26. Что будет выведено в результате работы кода?
«Истина» и «Ложь»
Ничего не будет выведено
* «Истина»
«Ложь»
29. Что будет результатом работы кода:
Многомерные массивы в PHP
Перепишем в более понятном виде:
Приведенный выше массив является двухмерным, так как внутри одного массива расположены другие подмассивы и уже в этих подмассивах нет других массивов. Чтобы вывести какой-либо элемент из двухмерного массива следует писать уже не одну пару квадратных скобок, а две:
Дан следующий массив:
Дан следующий массив:
Найдите сумму всех его элементов.
Трехмерный массив
Вот пример трехмерного массива:
Для вывода элементов из такого массива уже необходимо написать три квадратные скобки:
Дан следующий массив:
Найдите сумму всех элементов приведенного массива.
Ассоциативные массивы
Многомерные массивы также могут быть ассоциативными, например, вот так:
Давайте с помощью этого массива выведем на экран, к примеру, имя второго юзера:
Дан следующий массив:
Выведите с помощью этого массива имя первого мальчика и имя второй девочки.
Дан следующий массив:
Выведите с помощью этого массива английское название среды.
Дан следующий массив:
Выведите с помощью этого массива сумму зарплат первого и третьего юзера.
Произвольные массивы
Многомерные массивы не обязательно должны быть такими, как мы рассмотрели выше. Посмотрите, например, на следующий массив:
Если переписать его в более понятном виде, то мы увидим, что этот массив «неправильный». В нем рядом с обычными элементами располагаются массивы:
Дан следующий массив:
Найдите сумму всех элементов приведенного массива, обратившись к каждому элементу по его ключу.
Массивы в PHP. Часть 2.
В прошлый раз мы говорили о массивах в PHP. Это очень обширная тема, и писать о ней в одном посте было бы очень тяжело, как для меня, так и для читателя. В этом посте мы продолжим знакомиться с массивами в PHP, рассмотрим понятие вложенных массивов, а также особенности связанные с типизацией в PHP.
Итак, в прошлом уроке мы рассмотрели понятие массивов. Сегодня познакомимся с понятием рамерность массива.
Одномерные и многомерные массивы в PHP
Размерность массива — это уровень вложенности его элементов.
Массивы бывают одномерные (1 уровень вложенности элементов) и многомерные (2 и более уровней вложенности элементов).
Пример одномерного массива в PHP:
Это одномерные индексный массив состоящий из 3 элементов. Нумерация индексов начинается с 0 (вы уже должны это знать из предыдущей заметки).
Пример многомерного массива в PHP:
Это двухмерный массив, также состоящий из 3-х элементов:
В свою очередь в качестве элемента выступает другой массив, который может содержать в себе другие массив. Уровень вложенности массивово ограничивается, пожалуй, только количеством памяти, выделенной скрипту.
Какие типы данных может содержать в себе массив в PHP
Если вы внимательно читали предыдущие заметки, то знаете, что PHP обладает нестрогой типизацией, т.е. переменная может менять свой тип во время выполнения скрипта.
Если взять другие языки со строгой типизацией, то все элементы в массиве одного определенного типа. Говоря другими словами, массив может быть либо массивом строк, либо массивом чисел, и не может быть так, что один элемент массива строка, а второй целое число.
В PHP все не так. В PHP в одном и том же массиве в разных его элементах можно хранить любой тип данных.
Мы имеем массив из 3-х элементов. Первый элемент которого (‘Привет’) — строка, 2-ой — целое число, а 3-ий — вообще массив.
Тем людям, которые начинают изучение PHP с нуля, но до этого писали на других языках, наверное это покажется очень странным. Но ко всему, как говориться, привыкаешь и вскоре воспринимаешь как должное.
В теории это все вероятно сложно для начинающего программиста, но на практике на примерах — все просто понять.










