Список разделов



Поиск
введите слово для поиска
расширенный поиск




Календарь
<Сентябрь 2017>
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930 
ГлавнаяВходРегистрацияПоследние статьиПоискКонтакты
   

Секреты PHP-функций для работы с&nb p;массивами. Обработка данных и&nb p;сортировка

Итак, что же там с вашим менеджером, который был упомянут в анонсе статьи? Вы уже написали ту самую злополучную версию функции для перекодировки какого-то поля в XML-файле. Но вечером того же дня оказывается, что надо срочно поменять логику работы скрипта, который уже закачан на сервер, протестирован вашим инженерным составом и одобрен чуть ли не самим генеральным директором фирмы. В противном случае вся торговая деятельность вашего предприятия может быть просто парализована (случай из жизни одного знакомого администратора). В таком случае, если вам пришлось написать приложение на каком-то IDE вроде Delphi или Clarion, остается только собраться и приехать в офис, чтобы внести необходимые изменения. Зачем ехать, спросите вы? Все очень просто — начальник отдела безопасности категорически запретил выносить данные, и вы просто выполнили его очередной приказ. Для получения полной картины произошедшего представьте себе написанный на PHP сценарий разбора этого самого XML-файла. Вы просто упрашиваете вашего дежурного администратора отрыть доступ (по SSH, например, или с помощью того же MS-RDP) к вашему скрипту. В случае если у вас UNIX-сервер, то просто достаточно внести изменения и проверить работоспособность вашего приложения «не выходя с сервера». Конечно, может показаться, что приведенный выше пример слегка притянут за уши и не может никогда приключиться с вами. Но все же можно представить, насколько проще станет оперативно получать доступ к подконтрольным задачам (например, из другой страны или в дороге), если вы пользуетесь PHP, а не более «тяжелыми» средствами.

Зачем это надо

Для обеспечения достаточно высокого быстродействия при выполнении веб-скриптов иногда нужно отказаться от использования баз данных и выполнять операции по обработке матричных представлений информации с помощью массивов. В предыдущей статье цикла «Секреты PHP» речь шла о процессе создания массивов и о связанных понятиях ассоциативности и многомерности табличных данных. В этой статье я постараюсь продемонстрировать методы обработки табличных данных. Также будет сделан упор на функции, предназначенные для сортировки массивов.

Классификация типов функций для работы с массивами

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

  • Информационные функции. Например, получение количества элементов.
  • Преобразование различных типов данных в массивы и наоборот. Этот тип функций позволяет, например, перейти от строкового представления к массиву значений.
  • Методы, предназначенные для слияния и разбиения массивов.
  • Сортировка данных. Функции для сортировки позволяют выполнять манипулирование вашими массивами, как ассоциативного типа, так и с обычным, последовательным, ключом.
  • Обработка (групповая) данных. Функции типа callback, которые входят в этот тип, дают вам возможность применить написанную вами функцию к выбранным элементам массива (или ко всем последовательно) одной операцией.
  • Заполнение данными — инициализация массивов. В PHP нет такого понятия, как указание первоначальной размерности массива. Это, с одной стороны, позволяет серьезно экономить память, выделяемую при обработке скрипта на PHP, но с другой — может привести к блокировке его работы при превышении выделенным объемом памяти какого-либо граничного значения. Для начальной инициализации данными в состав языка включено сразу несколько необходимых функций.
  • Функции для перемещения по (внутреннему) индексу массива.

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

Информационные функции. Получение характеристик массива

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

  • is_array — эта функция проверяет, действительно ли переданное значение является массивом;
  • array_key_exists — проверка наличия ключа ассоциативного массива;
  • array_keys — получение массива с ключами. Эта функция позволяет перебрать все элементы ассоциативного массива, у которого в качестве ключа используется непоследовательный числовой ряд;
  • count (или sizeof) — получение количества элементов массива;
  • in_array — проверка, есть ли в указанном массиве нужное вам значение (которое, в свою очередь, также может быть массивом);
  • array_count_values — подсчет значений массива ("свертка по значению"). Возвращает ассоциативный массив, в качестве ключа которого используются значения из переданного параметра. В качестве значений результата выполнения функции будет число найденных таких значений. Удобно для подсчета в финансовых функциях.

Демонстрация работы функции array_keys, возвращающей список ключей

Преобразование данных

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

  • explode — преобразование строки в массив. При этом вы можете преобразовать в массив, например, CSV-строку (данные, разделенные точкой с запятой);
  • implode (join) — «склеивание» элементов массива в строку. Используя эту функцию в комплексе с file, можно преобразовать содержимое файла в строку. Join — это полный синоним функции implode;
  • split, preg_split — разбиение строки по регулярному выражению*. Эти функции позволяют преобразовать нетривиально представленные данные в массив. Например, можно конвертировать в табличное представление строковое выражение, не разделенное никакими специальными символами. В общем случае вторая функция работает несколько быстрее первой (по крайней мере, так утверждает документация по PHP);
  • array_combine — преобразование двух простых массивов в один ассоциативный, используя значения первого в качестве ключей для него, а соответствующие значения второго в качестве наполнителя значений итогового массива.

Убираем из строки все лишние разделители типа точки и нескольких пробелов подряд

Слияние, разбиение, сравнение

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

  • array_merge_recursive — рекурсивное слияние нескольких массивов;
  • array_merge — объединение нескольких массивов;
  • array_chunk — разбиение массива на части;
  • array_diff — простой анализ расхождений массивов;
  • array_diff_assoc, array_diff_key, array_diff_uassoc, array_diff_ukey — функции для сравнения массивов. Первая позволяет вычислить расхождения с проверкой индекса, вторая позволяет выполнить анализ по ключу, а третья и четвертая используют вызов определяемой пользователем функции для анализа расхождений значений и ключей массива. Эти функции позволяют, к примеру, провести семантический анализ вводимых данных путем вычленения неверно набранных символов или слов из набираемой фразы на основе пользовательского словаря;
  • array_intersect_* — группа функций, выполняющих операцию пересечения матричных данных. Позволяет, например, проводить операции анализа статистических данных.

Обработка данных

Функции этого типа необходимы для выполнения операций редактирования массивов. Вам в любой момент может понадобиться набор процедур для удаления данных из массива или получения какой-либо табличной выборки. Именно для этого и предназначена данная группа функций:

  • array_change_key_case — преобразование регистра символов ключей массива. По умолчанию ключи преобразуются в нижний регистр. Но если в качестве второго параметра для этой функции указать 1, то вы получите массив с ключами в верхнем регистре. Корректно обрабатываются и строки, набранные в кириллице;
  • array_multisort — сортировка нескольких массивов одновременно. Позволяет также обрабатывать многомерные массивы;
  • array_slice — получение среза массива;
  • array_flip — обмен значений местами;
  • array_map — применение пользовательской функции ко всем элементам массива. Так, например, можно убрать лишние пробелы из массива текста, каждая строка которого представляет собой строку текста (результат работы функции file);
  • array_splice — замена определенных элементов массива другими значениями;
  • array_unique — удаление повторяющихся значений.

Заполнение

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

  • array_pad — увеличение размера массива до указанной величины. Функция может быть чрезвычайно полезна при тестировании выделения памяти вашему скрипту;
  • range — заполнение массива диапазоном значений. Вы можете присвоить первому элементу массива значение 1, второму — 2 и так далее;
  • list — эта синтаксическая конструкция языка PHP позволяет присвоить списку переменных значения в одной операции.

«Расширение» массива путем добавления указанного значения до достижения массивом нужной размерности

Сортировка массивов

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

  • sort (rsort) — сортировка массива (rsort — обратный порядок сортировки);
  • ksort (krsort) — сортировка массива по ключам (krsort выполняет то же, только в обратном порядке);
  • asort (arsort) — сортировка массива по значениям (без сохранения ассоциативности массива);
  • array_multisort — сортировка нескольких массивов (можно также обработать и многомерные табличные данные);
  • uasort, uksort, usort — сортировка массива с использованием пользовательской функции. В первой функции сортировка идет по значениям с сохранением ключей, во второй используются ключи, а третья использует функцию пользователя для сравнения значения;
  • shuffle — перемешивание данных в массиве.

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

Сортировка массива

Навигация и доступ к данным массива

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

  • pos (или current) — получение текущего положения указателя;
  • reset — установка указателя на первый элемент массива;
  • end — установка указателя на последний элемент массива;
  • prev — установка указателя на предыдущее значение;
  • next — установка указателя на следующее значение;
  • each — получение ключа и значения из ассоциативного массива и сдвиг его указателя «вниз».

Выводы

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

Ссылки по теме




Статья получена: hostinfo.ru



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


1 : Создаём WAP-сайты. Часть 3. PHP и MySQL
Пришло время для разговора о технологиях, которые помогут вам создавать динамические WAP-сайты. Мы выбрали технологии PHP и MySQL.Сразу хочется отметить, что сегодня мы рассмотрим лишь основы, достаточные для того, чтобы вы поняли принципы функционир...

2 : Экономьте время и деньги
Если у Вас не хватает финансов на полный ремонт квартиры, то один из способов решения этой проблемы это разделить ремонтные работы на два этапа: подготовительные работы и финишные отделочные работы.Смысл заключается в следующем. Подготовительные рабо...

3 : Рынок разработки переполнен недоучками – PHP и хорош и плох своей простотой.
24-25 мая Международный PHPCLUB совместно с корпорацией Microsoft провел шестую международную конференцию веб-разработчиков. На мероприятие собрался практически весь цвет разработчиков Рунета. За два дня успели обсудить все актуальные вопросы: - прим...

4 : Многосменный режим работы
"Нормативные акты для бухгалтера" / Что значит термин «работа в две смены»? Предположим, что на нашей фирме установлена 20-часовая рабочая неделя. При этом все трудятся по 40 часов. Можно ли это считать двухсменным режимом работы (каждая смена ...

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

Рейтинг: 3.1/5 (34 голоса)

Последние статьи


1: Автоматическая сверка счетов-фактур – новые возможности «1С:Бухгалтерии 8» ред. 3.0
2: Возможности CRM в 1С «Управление торговлей»
3: Настройка отчетов 1С
4: Как отразить доп. расходы в 1С?
5: Взаимозачет в 1С



Последние новости


Делец в Удмуртии на госденьги открыл нарколабораторию - УФСБ
МОСКВА, 2 ноя - РИА Новости. Следствие заподозрило жителя Удмуртии в организации нарколаборатории на полученные от государства деньги, сообщает в пятн...

Сотрудница томского вуза продавала героин около общежития

ТОМСК, 2 ноя – РИА Новости, Сергей Леваненков. Полиция задержала 58-летнюю томичку при попытке продать героин, возбуждено уголовное дело, сообщи...

Молодежную премию наноиндустрии получил автор технологии для наркоза

© РИА Новости. Сергей ПятаковМОСКВА, 1 ноя - РИА Новости. Лауреатом Российской молодежной премии в области наноиндустрии 2012 года стал заместитель ге...

Жители еще одного мексиканского города взялись за борьбу с наркомафией

МЕХИКО, 2 ноя - РИА Новости, Дмитрий Знаменский. Жители города Олинала в мексиканском штате Герреро взяли в руки оружие, чтобы противостоять попыткам ...

Бразильские студенты получали наркотики по специально вырытому туннелю

© РИА Новости. Артур ГабдрахмановМЕХИКО, 2 ноя - РИА Новости, Дмитрий Знаменский. Оригинальный способ доставки наркотиков в университет крупнейшего бр...


Послать ссылку на этот обзор другу по ICQ или E-Mail:


Разместить у себя на ресурсе или в ЖЖ:


На любом форуме в своем сообщении: