|
Основное назначение массивов - быстрая обработка данных. Часто разработчики программного обеспечения выполняют с их помощью сортирование информации, манипулирование исходными данными и получение различных выборок из наборов данных. Бытует мнение, что функциональность массивов гораздо проще организовать с помощью применения "толстой" прослойки SQL-кода и обращения к внешним приложениям типа специализированных хранилищ данных. Конечно, такой подход позволяет более просто реализовать элементарные вещи, но вас может ждать небольшое разочарование заказчика в плане быстродействия всего приложения. Представьте себе наиболее часто выполняемые задачи при выводе информации в аналитических системах предприятий - сортировка фамилий сотрудников, выбор товаров в каком-либо ценовом пределе, формирование списка категорий торговых менеджеров вашей организации, хранение оперативных данных о курсе валют. Поскольку выполнение таких элементарных задач (обычно) требует наличия SQL-хранилищ исходной информации и обращения к базам данных, работоспособность и скорость ваших приложений часто зависят от надежности и быстродействия технологического решения SQL-хранилища. Действительно, в случае применения отказоустойчивой системы хранения данных, размещенной на нескольких серверах, использование хранилища данных типа MySQL представляет собой узкое звено всей системы. Представьте себе, что может произойти, если разнесенные рабочие места обращаются к единой информационной таблице с курсами валют, которую по какой-либо причине заблокировало другое неверно работающее приложение. Да и простое обращение сотен компьютеров к одной таблице может очень сильно повредить быстродействию всего процесса работы аналитической системы, написанной на основе использования единого SQL-хранилища данных.
Наверное, такие задачи встречаются в жизни среднего веб-разработчика достаточно редко, но и простое использование функций для работы с массивами в обычной "плоской" задаче очень часто позволяет увеличить быстродействие вашего приложения. Поскольку задачи увеличения скорости работы интерфейсов и обработки данных встречаются в программировании бизнес-логики сплошь и рядом, функции для работы с массивами применяются практически во всех мало-мальски известных языках программирования, которые используются при написании задач аналитического учета.
В большинстве случае использование массивов предлагает удобный способ для хранения однородных данных. PHP не представляет собой исключение из общего подхода. В этом языке поддерживаются все основные функции по работе с массивами. Несколько отличающийся подход к доступу к данным заключается в наличии нескольких типов функций. Одни из них позволяют проводить достаточно привычные операции вроде сортировки данных. Другие - более сложные, предназначенные для работы с ассоциативными (построенными по принципу размещения данных не по нумерологическому, а по строковому представлению индекса данных) массивами. Также есть специализированная группа функций для выполнения сложных и не часто используемых операций вроде рекурсивного прохода по дереву значений многомерного массива. Конечно, наличие массы функций - положительная характеристика средства разработки, но, забегая наперед, могу сказать, что именно наличие функций для работы с ассоциативной информацией делает использование массивов столь излюбленным средством многочисленных разработчиков веб-приложений на PHP.
Поскольку количество используемых в языке функций для обработки данных в массивах достаточно велико и сама документация по PHP не предусматривает никакого деления их по типам, необходима какая-то система анализа всего этого многообразия. Такая классификация позволит новичку представить весь функционал подсистемы работы с таким типом данных, а профессионалу четко выделить необходимый в конкретный момент метод. Весь функционал по работе с массивами в PHP можно разбить на следующие основные категории:
- создание массивов;
- вывод данных;
- тестирование наборов данных;
- добавление и удаление элементов массивов;
- поиск информации;
- выполнение операций наложения (умножения) матриц с данными;
- определение параметров набора;
- сортировка;
- объединение, выделение и разделение данных.
Что такое массив? Традиционно - это набор групп данных, имеющих одни и те же характеристики и объединенных в общность путем присвоения отдельным частям данных ключевых индексов, позволяющих найти требуемые данные. Почему я употребляю термин "традиционно"? Дело в том, что в массиве можно разместить и совершенно разнотипные данные, если это кому-то будет нужно. В PHP работа с массивами строится на основании следующего принципа, который обеспечивает прозрачность всех методов для доступа к данным. Итак, каждый элемент массива данных состоит из двух частей - значения и ключа, который идентифицирует местоположение значения. Сам по себе ключ может быть цифровым и представлять собой классический (цифровой) номер элемента массива. На приведенном ниже рисунке вы увидите, как выглядит объявление массива в коде. Назначение массива - хранение списка городов.
Использованная форма объявления массива называется расширенной. Таким образом, вы задаете при объявлении также и набор значений, который хранится в самом массиве. Причем указывается также и значение ключа. Если задать вопрос, зачем нужно задавать значение ключа, то достаточно рассмотреть приводимый ниже пример, который показывает случай создания массива без присвоения ключей, а только с определением значений. Если обратить внимание на значения ключей, то можно увидеть, что они начинаются с нуля.
Использование ассоциативных массивов оправдано в том случае, если применение обычных массивов не имеет смысла. Такой вариант возможен, например, при построении среза данных о соответствии строкового названия валюты и ее курса на текущий момент в аналитической системе. В таком случае массив в виде RU=>0.67,USD=>5.03 имеет гораздо более понятное представление, чем, например, в виде 0=>0.67,1=>5.03. Конечно, можно возразить, что подобные задачи решаются применением реляционной базы, но зачем выполнять запросы к базе там, где это не нужно фактически. Действительно, гораздо проще выполнять инициализацию массива курсов валют, например, при создании PHP-класса, ответственного за обработку цен товаров, чем каждый раз включать в запрос данных из таблицы валют. Конечно, такая ситуация будет реальной, если курс валют фиксируется только на начало операционного дня. Однако даже такой пример показывает, что использование элементарного ассоциативного массива позволит ускорить критичную часть вашего кода.
Массивы в PHP могут быть как плоскими (одномерными), так и содержащими другие массивы (то есть многомерными). Пример объявления многомерного массива, содержащего названия улиц и городов, приведен на следующем рисунке.
Для доступа к данным различных типов массивов применяется синтаксическая конструкция языка, состоящая из квадратных скобок. К элементу ассоциативного массива можно обращаться только по значению ключа. Таким образом, попытка получить данные следующим способом: $towns_ua[0] - вернет пустое значение. Для обращения к данным многомерных массивов применяется выражение следующего вида: $towns_ua["Львов"]["Соборная"] - таким образом, например, удобно хранить почтовые индексы улиц в одном массиве данных. Существует также несколько необычный вид заполнения данных массива - без указания ключа вообще. На приведенном ниже рисунке видно, как можно заполнить массив несколькими значениями. Такая форма очень удобна для применения в именах переменных для веб-форм. Таким образом, просто назвав однотипные элементы онлайн-формы, например, как element[], можно ввести данные в массив (конечно, такой пример не учитывает современные требования безопасности и приводится только для демонстрации самой возможности).
Массивы играют важную роль при создании онлайн-приложений. В языке веб-программирования применение массива позволяет намного увеличить быстродействие и повысить безопасность приложения за счет использования бездисковых операций и вообще меньшего количества обращений к внешним приложениям. В этой статье рассмотрены элементарные вопросы, все же необходимые для начала работы с массивами. Конечно же, в столь небольшом изложении трудно перечислить все возможности массивов, но некоторое представление про всю сложность и красоту реализации этого механизма можно получить даже на его основе.