Язык программирования PHP | страница 63




Необходимость сортировки данных, в том числе и данных, хранящихся в виде массивов, очень часто возникает при решении самых разнообразных задач. Если в языке Си для того, чтобы решить эту задачу, нужно написать десятки строк кода, то в PHP это делается одной простой командой.


Функция sort


Функция sort имеет следующий синтаксис


>sort (массив [, флаги])


и сортирует массив, т.е. упорядочивает его значения по возрастанию. Эта функция удаляет все существовавшие в массиве ключи, заменяя их числовыми индексами, соответствующими новому порядку элементов. В случае успешного завершения работы она возвращает true, иначе – false.


Пример 7.6. Пусть у нас есть два массива: цены товаров – их названия и, наоборот, названия товаров – их цены. Упорядочим эти массивы по возрастанию:


>$items = array(10 => "хлеб", 20 => "молоко",

> 30 => "бутерброд");

>sort($items);

> // строки сортируются в алфавитном

> // порядке, ключи теряются

>print_r($items);

>$rev_items = array("хлеб" => 10,

> "бутерброд" => 30, "молоко" => 20);

>sort($rev_items);

> // числа сортируются по возрастанию,

> // ключи теряются

>print_r($rev_items);

>?>



Получим:


>Array ( [0] => бутерброд [1] =>

> молоко [2] => хлеб )

>Array ( [0] => 10 [1] => 20 [2] => 30 )



В качестве дополнительного аргумента флаги может использоваться одна из следующих констант:


- SORT_REGULAR – сравнивать элементы массива обычным образом;


- SORT_NUMERIC – сравнивать элементы массива как числа;


- SORT_STRING – сравнивать элементы массива как строки.


Функции asort, rsort, arsort


Если требуется сохранять индексы элементов массива после сортировки, то нужно использовать функцию asort (массив [, флаги]). Если необходимо отсортировать массив в обратном порядке, т.е. от наибольшего значения к наименьшему, то можно задействовать функцию rsort (массив [, флаги]). А если при этом нужно еще и сохранить значения ключей, то следует использовать функцию arsort(массив [, флаги]). Как вы, наверное, заметили синтаксис у этих функций абсолютно такой же, как у функции sort. Соответственно и значения флагов могут быть такими же, как у sort: SORT_REGULAR, SORT_NUMERIC, SORT_STRING. Кстати говоря, флаг SORT_NUMERIC появился только в PHP4.


>

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

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

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

>asort($books);

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

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

>print_r($books);

>echo "
";

>rsort($books);

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