Здравствуйте! Записался на ваш курс, но не понимаю как произвести оплату. Надо ли писать заявление и, если да, то куда отправлять? как я получу диплом о профессиональной переподготовке? |
Работа с массивами данных
Сортировка массива по ключам
Очевидно, что может возникнуть необходимость в сортировке массива по значениям ключей. Например, если у нас есть массив данных о книгах, как в приведенном выше примере, то вполне вероятно, что мы захотим отсортировать книги по именам авторов. Для этого в PHP также не нужно писать много строк кода – можно просто воспользоваться функцией ksort() для сортировки по возрастанию (прямой порядок сортировки ) или krsort() – для сортировки по убыванию (обратный порядок сортировки ). Синтаксис этих функций опять же аналогичен синтаксису функции sort() .
<?php $books = array("Пушкин"=>"Руслан и Людмила", "Толстой"=>"Война и мир", "Лермонтов"=>"Герой нашего времени"); ksort($books); // сортируем массив, // сохраняя значения ключей print_r($books); ?>Пример 7.9. Сортировка массива по ключам
Получим:
Array ( [Лермонтов] => Герой нашего времени [Пушкин] => Руслан и Людмила [Толстой] => Война и мир )
Сортировка с помощью функции, заданной пользователем
Кроме двух простых способов сортировки значений массива (по убыванию или по возрастанию) PHP предлагает пользователю возможность самому задавать критерии для сортировки данных. Критерий задается с помощью функции, имя которой указывается в качестве аргумента для специальных функций сортировки usort() или uksort() . По названиям этих функций можно догадаться, что usort() сортирует значения элементов массива, а uksort() – значения ключей массива с помощью определенной пользователем функции. Обе функции возвращают true, если сортировка прошла успешно, и false – в противном случае. Их синтаксис выглядит следующим образом:
usort (массив , сортирующая функция) uksort (массив , сортирующая функция)
Конечно же, нельзя сортировать массив с помощью любой пользовательской функции. Эта функция должна удовлетворять определенным критериям, позволяющим сравнивать элементы массива. Как должна быть устроена сортирующая функция? Во-первых, она должна иметь два аргумента. В них интерпретатор будет передавать пары значений элементов для функции usort() или ключей массива для функции uksort() . Во-вторых, сортирующая функция должна возвращать:
- целое число, меньшее нуля, если первый аргумент меньше второго;
- число, равное нулю, если два аргумента равны;
- число большее нуля, если первый аргумент больше второго.
Как и для других функций сортировки, для функции usort() существует аналог, не изменяющий значения ключей, – функция uasort() .
Пример 7.10. Допустим, у нас есть массив, содержащий такие сведения о литературных произведениях, как название, автор и год создания. Мы хотим упорядочить книги по дате создания.
<?php // массив выглядит таким образом: $books = array("Герой нашего времени" => array ("Лермонтов", 1840), "Руслан и Людмила" => array("Пушкин",1820), "Война и мир" => array ("Толстой",1863), "Идиот" => array("Достоевский",1868)); /* можно, конечно переписать этот массив по-другому, сделав год издания, например, индексом, но гораздо удобнее написать свою функцию для сортировки */ uasort($books,"cmp"); // сортируем массив с помощью функции cmp foreach ($books as $key => $book) { echo "$book[0]: \"$key\"<br>"; } function cmp($a,$b){ // функция, определяющая способ сортировки if ($a[1] < $b[1]) return -1; elseif ($a[1]==$b[1]) return 0; else return 1; } ?>Пример 7.10. Сортировка с помощью пользовательских функций
В результате получим:
Пушкин: "Руслан и Людмила" Лермонтов: "Герой нашего времени" Толстой: "Война и мир" Достоевский: "Идиот"
Мы применили нашу собственную функцию сортировки ко всем элементам массива. Далее рассмотрим, как применить к элементам массива любую другую пользовательскую функцию.