Чтение онлайн

на главную - закладки

Жанры

Курс "Язык программирования PHP"

Савельева Нина Владимировна

Шрифт:

<?php

print_r($_GET); echo "<br>";

arsort ($_GET);

// сортируем массив в обратном порядке,

// сохраняя ключи

print_r($_GET); echo "<br>";

$ordered_names = array_keys($_GET);

// составляем новый массив

foreach($ordered_names as $key => $val)

echo "$key :$val <br>";

// выводим элементы нового массива

?>

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

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

<?php

$books = array("Пушкин"=>"Руслан и Людмила",

"Толстой"=>"Война и мир",

"Лермонтов"=>"Герой нашего времени");

ksort($books);

// сортируем массив,

// сохраняя значения ключей

print_r($books);

?>

Получим:

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;

}

?>

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

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

Лермонтов: "Герой нашего времени"

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

Достоевский: "Идиот"

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

Применение функции ко всем элементам массива

Функция array_walk(массив, функция [, данные]) применяет созданную пользователем функцию функция ко всем элементам массива массив и возвращает true в случае успешного выполнения операции и false – в противном случае.

Пользовательская функция, как правило, имеет два аргумента, в которые поочередно передаются значение и ключ каждого элемента массива. Но если при вызове функции array_walk указан третий аргумент, то он будет рассмотрен как значение третьего аргумента пользовательской функции, смысл которого определяет сам пользователь. Если функция пользователя требует больше аргументов, чем в нее передано, то при каждом вызове array_walk будет выдаваться предупреждение.

Поделиться:
Популярные книги

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Черная метка

Лисина Александра
7. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черная метка

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Я еще не бог. Книга XXXV

Дрейк Сириус
35. Дорогой барон!
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Я еще не бог. Книга XXXV

Боярышня Дуняша 2

Меллер Юлия Викторовна
2. Боярышня
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Боярышня Дуняша 2

Изгой Проклятого Клана. Том 4

Пламенев Владимир
4. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 4

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Локки 2. Потомок бога

Решетов Евгений Валерьевич
2. Локки
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Локки 2. Потомок бога

Локки 9. Потомок бога

Решетов Евгений Валерьевич
9. Локки
Фантастика:
фэнтези
попаданцы
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 9. Потомок бога

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Первый среди равных. Книга II

Бор Жорж
2. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга II

Идеальный мир для Лекаря 23

Сапфир Олег
23. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 23

Наследие Маозари 7

Панежин Евгений
7. Наследие Маозари
Фантастика:
боевая фантастика
юмористическое фэнтези
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 7

Геном хищника. Книга четвертая

Гарцевич Евгений Александрович
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая