Сортировка PHP-массивов
PHP располагает вариаций хранения данных. В их числе присутствуют массивы, представляющие собой находящиеся в определённом порядке своды информации и поддерживающие автоматическую сортировку.
Описание элемента
Массивы – аналог, но не полноценная замена знакомых каждому человеку таблиц. От них он отличается возможностью удобного чтения и программами, и людьми. В этом языке разделяют два видаarray, как их ещё называют в некоторых переведённых на русский самоучителях. Первый представлен парой «ключ значение» (например, ‘fruit’ => ‘apple’), а второй – «значение» (‘apple’).
Есть и другие деления массивов, связанные с их структурами. Возможность подставить в качестве значения любой arrayпозволяет создавать организованные системы вложеностей. Ограничений в этом плане нет, однако в оптимизации кода решающую роль сыграет использование баз данных, поддерживающих больший набор функций и имеющих массу видов, среди которых наиболее яркими являются:
- MySQL;
- проект тех же создателей под названием MariaDB;
- PostgreSQL.
Для вывода целого массива следует использовать функцию print_r();. Поскольку она не относится к базовым единицам языка, как, к примеру, print или echo, простановка скобок обязательна. Получить один элемент можно, обратившись к массиву, как к переменной, и заключив имя ключа в квадратные скобки и кавычки. Последние не требуются, если значение нужно получить по его номеру. Отсчёт идёт с нуля, а отрицательные числа дадут прочитать array с конца.
Доступные функции
Полный список команд, связанных с массивами, представлен несколькими десятками функциями, описанными в официальной документации. В их разнообразие легко запутаться, но в решении поставленного в теме статьи вопроса помогут 13 представленных ниже возможностей.
Следующие функции обеспечивают сортировку по ключам:
- ksort(); – по возрастанию;
- krsort();– по убыванию;
- uksort();– по пользовательскому фильтру.
Остальные работают со значениями:
- uasort();
- usort();
- sort();
- shuffle();
- rsort();
- natsort();
- natcasesort();
- asort();
- arsort();
- array_multisort();.
Существенная разница между первым и вторым списками объясняется сохранением некоторыми функциями и разрушением другими связки «ключ значение», чувствительностью к регистру. Особое внимание – у shuffle();, вовсе выполняющего действия хаотично – его принцип работы основывается на генерации псевдослучайных чисел (истинно случайные значения сгенерировать средствами PHP невозможно).
Примеры использования
Перемешивание массива
С этой задачей справится упомянутая выше функция shuffle();, которая принимает только один аргумент – массив. Для компактности лучше записать его в переменную, а не выводить непосредственно с командой. Это улучшит удобность чтения кода, важную для внесения дальнейших изменений, если они когда-нибудь потребуются.
<?
$countries = array(
«RU» =>»Russia»,
«UA» =>»Ukraine»,
«KZ» =>»Kazakhstan»
); # Создание массива с парой «ключ-значение».
shuffle($countries); # Перемешивание массива на основе псевдослучайных чисел.
foreach ($countries as $result) {
echo $result.» «; # Вывод каждого значения, получившегося после перемешивания.
}
?>
Работает с любыми формами записи. Начиная со спецификации 7.1.0 используется иная формула перераспределения значений и/или ключей, которой обеспечивается повышенная скорость выполнения программы. Для выбора только ключей, проводимого случайным образом, следует воспользоваться array_rand();, появившемся в четвёртой версии языка.
Алфавитное сортирование
Для сортировки по ключам, стоящим в начале комбинаций, используется ksort();. К нему можно подставить флаги, обеспечивающие особый режим работы и не дающие PHP «засориться» массой функций, исполняющих похожие роли.
<?
$array = array(
«B» => 8,
«A» => 9,
«C» => 11111
); # Создание массива
ksort($array); # Сортировка массива по возрастанию ключа
print_r($array);# Вывод массива
?>
Те же действия, но с проверкой по значениям, выполняются sort();. Ему также свойственен простой синтаксис.
<?
$array = array(
«Bread»,
«Apple»,
«Cucumber»
); # Создание массива
sort($array); # Сортировка массива по возрастанию значения
print_r($array); # Вывод массива
?>
Сортировать по алфавитному убыванию помогут krsort(); и rsort(); соответственно. В случае с ними никаких сложностей тоже не возникнет – достаточно подставить массив и, по желанию, модификатор:
- SORT_REGULAR– стандартное сравнение, используется по умолчанию;
- SORT_NUMERIC – перевод ключей или значений в числа перед выполнением сортировки;
- SORT_STRING – сортирование значений либо ключей, как строк;
- SORT_LOCALE_STRING – учитывание норм языкового стандарта, заданного с помощью setlocale();
- SORT_NATURAL– сортировка по тому же принципу, что у natsort();
- SORT_FLAG_CASE – работа вне зависимости от регистра.