Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
массива по значениям 
(asort()/arsort()) 
Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его зна- 

чения шли в алфавитном (если это строки) или в возрастающем (для чисел) порядке.
 
При этом сохраняются связи между ключами и соответствующими им значениями, 
т. е. некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые — 
наоборот, "опускаются". Например: 
$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor"); 
asort($A); 
foreach($A as $k=>$v) echo "$k=>$v "; 
// выводит "c=>Alpha d=>Processor b=>Weapon a=>Zero" 
// как видим, поменялся только порядок пар ключ=>значение 
Функция arsort() выполняет то же самое, за одним исключением: она упорядочи- 
вает массив не по возрастанию, а по убыванию. 

Глава 13. Работа с массивами 227 
Сортировка по ключам (ksort()/krsort()) 
Функция ksort() практически идентична функции asort(), с тем различием, что 
сортировка осуществляется не по значениями, а по ключам (в порядке возрастания).
 
Например: 
$A=array("d"=>"Zero", "c"=>"Weapon", "b"=>"Alpha", "a"=>"Processor"); 
ksort($A); 
for(Reset($A); list($k,$v)=each($A);) echo "$k=>$v "; 
// выводит "a=>Processor b=>Alpha c=>Weapon d=>Zero" 
Функция для сортировки по ключам в обратном порядке называется krsort() и 
применяется точно в таком же контексте, что и ksort(). 
Сортировка по ключам 
при помощи функции uksort() 
Довольно часто нам приходится сортировать что-то по более сложному критерию, 
чем просто по алфавиту. Например, пусть в $Files хранится список имен файлов и 
подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не 
только в лексикографическом порядке, но также и чтобы все каталоги 
предшествова- 
ли файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав 
предварительно функцию сравнения с двумя параметрами, как того требует 
uksort(). 
О функциях мы поговорим в главе 14, а пока, я надеюсь, все должно быть яс- 
но из примера (листинг 13.1). 
Листинг 13.1. Сортировка с помощью пользовательской функции 
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать: 
// -1, если $f1<$f2, 
// 0, если $f1==$f2 
// 1, если $f1>$f2 
// Под < и > понимается следование этих имен в выводимом списке 
function FCmp($f1,$f2) 
{ // Каталог всегда предшествует файлу 
if(is_dir($f1) && !is_dir($f2)) return -1; 
// Файл всегда идет после каталога 
if(!is_dir($f1) && is_dir($f2)) return 1; 
// Иначе сравниваем лексикографически 
if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0; 

Часть IV. Стандартные функции PHP 228 
} 
// Пусть $Files содержит массив с ключами — именами файлов 
// в текущем каталоге. Отсортируем его. 
uksort($Files,"FCmp"); // передаем функцию сортировки "по ссылке" 
Конечно, связи между ключами и значениями функцией uksort() сохраняются, т. е., 

опять же, некоторые пары просто "всплывают" наверх, а другие — "оседают". 
Сортировка по значениям 
при помощи функции uasort() 
Функция uasort() очень похожа на uksort(), с той разницей, что сменной (поль- 
зовательской) функции сортировки "подсовываются" не ключи, а очередные значения 

из массива. При этом также сохраняются связи в парах ключ=>значение. 
Переворачивание массива array_reverce() 
Функция array_reverse() возвращает массив, элементы которого следуют в об- 
ратном порядке относительно массива, переданного в параметре. При этом связи 
ме- 
жду ключами и значениями, конечно, не теряются. Например, вместо того, чтобы 
ранжировать массив в обратном порядке при помощи arsort(), мы можем отсорти- 
ровать его в прямом порядке, а затем перевернуть: 
$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor"); 
asort($A); 
$A=array_reverse($A); 
Конечно, указанная последовательность работает дольше, чем один-единственный 
вызов arsort(). 
Сортировка списка sort()/rsort() 
Эти две функции предназначены в первую очередь для сортировки списков (напоми- 
наю, что под списками я понимаю массивы, ключ
 
<<-[Весь Текст]
Страница: из 287
 <<-