Интернет-Университет Информационных Технологий: бесплатное дистанционное образование компьютерным дисциплинам
  Лекции
Язык программирования PHP
1.   Введение в PHP
2.   Основы синтаксиса
3.   Управляющие конструкции
4.   Обработка запросов с помощью PHP
5.   Функции в PHP
6.   Объекты и классы в PHP
7.   Работа с массивами данных
8.   Работа со строками
9.   Работа с файловой системой
10.   Базы данных и СУБД. Введение в S...
11.   Взаимодействие PHP и MySQL
12.   Авторизация доступа с помощью се...
13.   Регулярные выражения
14.   Взаимодействие PHP и XML
15.   Использование шаблонов в PHP
    Экзамен
    Сдать экзамен экстерном
    Литература
    Предметный указатель
    Примеры

Язык программирования PHP
7. Лекция: Работа с массивами данных
Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | вопросы | » | учебники | для печати и PDA
  Если Вы заметили ошибку - сообщите нам.  

Сортировка массива по ключам

Очевидно, что может возникнуть необходимость в сортировке массива по значениям ключей. Например, если у нас есть массив данных о книгах, как в приведенном выше примере, то вполне вероятно, что мы захотим отсортировать книги по именам авторов. Для этого в PHP также не нужно писать много строк кода – можно просто воспользоваться функцией ksort() для сортировки по возрастанию (прямой порядок сортировки) или krsort() – для сортировки по убыванию (обратный порядок сортировки). Синтаксис этих функций опять же аналогичен синтаксису функции sort().

<?php
$books = array("Пушкин"=>"Руслан и Людмила",
     "Толстой"=>"Война и мир",
     "Лермонтов"=>"Герой нашего времени");
ksort($books); 
    // сортируем массив, 
    // сохраняя значения ключей
print_r($books);
?>
        
Пример 7.9. Сортировка массива по ключам (html, txt)

Получим:

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. Сортировка с помощью пользовательских функций (html, txt)

В результате получим:

Пушкин: "Руслан и Людмила"
Лермонтов: "Герой нашего времени"
Толстой: "Война и мир"
Достоевский: "Идиот"
        

Мы применили нашу собственную функцию сортировки ко всем элементам массива. Далее рассмотрим, как применить к элементам массива любую другую пользовательскую функцию.

Дальше »
  Если Вы заметили ошибку - сообщите нам.  
Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | вопросы | » | учебники | для печати и PDA
Курсы | Учебные программы | Учебники | Новости | Форум | Помощь

Телефон: (495) 253-9312, 253-9313, факс: (495) 253-9310, email: info@intuit.ru
© 2003-2006, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование