От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы познакомимся с классом-помощником Yii2 ArrayHelper. Данный хэлпер предлагает набор методов для удобной работы с массивами.
Итак, мы продолжаем знакомиться с помощником по работе с массивами yii\helpers\ArrayHelper. В предыдущей статье мы изучили три метода хэлпера: map, getColumn и index, которые на мой взгляд, могут довольно часто понадобиться в работе. Благодаря удобству использования, мы можем выбрать из массива нужную колонку ключей, переиндексировать массив или взять из массива нужные элементы, создавая новый массив. Очень удобно.
Данную статью мы начнем с метода multisort, который связан с сортировкой массивов. Метод multisort позволяет сортировать массивы по нужному ключу или даже по нескольким ключам одновременно. Давайте попробуем. Возьмем тот же массив категорий из предыдущей статьи:
И отсортируем его по наименованию категорий:
1 |
ArrayHelper::multisort($cats, 'name'); |
В качестве третьего необязательного параметра мы можем передать константу, отвечающую за направление сортировки: SORT_ASC или SORT_DESC. По умолчанию это SORT_ASC, т.е. прямой порядок сортировки. Давайте сортируем массив в обратном порядке.
1 |
ArrayHelper::multisort($cats, 'name', SORT_DESC); |
В качестве второго и третьего параметров мы можем передавать и массивы. В этом случае все происходит ровно так, как в языке SQL, когда мы сортируем по более чем одному полю, т.е. вначале сортировка производится по полю, переданному первым элементом массива, а внутри группы уже происходит сортировка по второму критерию.
Наш массив не подходит для такой сортировки, поэтому, чтобы стала понятнее суть, я создам для данного примера тестовый массив книг, в котором будет храниться наименование книги и год ее издания. После этого сортируем массив по году:
1 2 3 4 5 6 7 |
$books = [ ['title' => 'Айвенго', 'year' => 2017], ['title' => 'Три мушкетера', 'year' => 2015], ['title' => 'Три толстяка', 'year' => 2015], ['title' => 'Три орешка для Золушки', 'year' => 2015], ]; ArrayHelper::multisort($books, 'year'); |
А теперь внутри группы книг за 2015 год проведем дополнительную сортировку по наименованию, к примеру в обратном порядке. Записывается это следующим образом:
1 |
ArrayHelper::multisort($books, ['year', 'title'], [SORT_ASC, SORT_DESC]); |
Думаю, суть работы функции понятна. Еще пара полезных методов, о которых я хочу сказать несколько слов, — это методы htmlEncode и htmlDecode, которые кодирую и декодируют специальные символы, соответственно. Как вы уже догадались, данные методы в своей работе используют соответствующие PHP функции htmlspecialchars и htmlspecialchars_decode.
Для примера создадим массив с парой специальных символов и попробуем его вывести как есть, а после попробуем применить метод htmlEncode и вывести еще раз:
1 2 3 4 |
$array = ['&', '"']; print_r($array); $array = ArrayHelper::htmlEncode($array); print_r($array); |
Если взглянуть на страницу в браузере, то разницы мы не увидим:
Но если открыть исходный код страницы, то мы увидим, что htmlEncode преобразовал специальные символы в HTML-сущности:
Все просто! На этом мы сегодня завершим статью. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.