Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PI_lektsii_2016.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.12 Mб
Скачать

11.2.3 Сортування масиву за ключами.

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

<?php

$books = array("Пушкін"=>"Руслан і Людмила", "Толстой"=>"Війна і мир", "Лермонтов"=>"Герой нашого часу");

ksort($books); // сортуємо масив, зберігаючи значення ключів

print_r($books);

?>

Отримаємо:

Array ( [Лермонтов] => Герой нашого часу

[Пушкін] => Руслан і Людмила

[Толстой] => Війна і мир )

11.2.4 Сортування за допомогою функції, заданої користувачем.

Крім двох простих способів сортування значень масиву (по спаданню або по зростанню) PHP пропонує користувачеві можливість самому задавати критерії для сортування даних. Критерій задається за допомогою функції, ім'я якої вказується в якості аргументу для спеціальних функцій сортування usort () або uksort (). Уже з цих функцій можна здогадатися, що usort () сортує значення елементів масиву, а uksort () – значення ключів масиву за допомогою певної користувачем функції. Обидві функції повертають true, якщо сортування пройшла успішно, і false – в протилежному випадку. Їх синтаксис виглядає наступним чином:

usort (масив, сортируюча функція);

uksort (масив, сортируюча функція);

Звичайно ж, не можна сортувати масив за допомогою будь-якої функції. Ця функція повинна задовольняти певні критерії, що дозволяють порівнювати елементи масиву. Як повинна бути влаштована сортируюча функція? По-перше, вона повинна мати два аргументи. У них інтерпретатор буде передавати пари значень елементів для функції usort() або ключів масиву для функції uksort(). По-друге, сортируюча функція повинна повертати:

• ціле число, менше нуля, якщо перший аргумент менше другого;

•число, рівне нулю, якщо два аргументи рівні; • число більше нуля, якщо перший аргумент більше другого.

Як і для інших функцій сортування, для функції usort() існує аналог, який не змінює значення ключів, – функція uasort().

Припустимо, у нас є масив, що містить такі відомості про літературні твори, такі як назва, автор і рік створення. Ми хочемо впорядкувати книги по даті створення.

<?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;

}

?>

В результаті отримаємо:

Пушкін: "Руслан і Людмила"

Лермонтов: "Герой нашого часу"

Толстой: "Війна і мир"

Достоєвський: "Ідіот"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]