Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WEB - Лабораторная работа_3 - PHP.pdf
Скачиваний:
90
Добавлен:
26.03.2015
Размер:
232.72 Кб
Скачать

перебора в версиях, начиная с PHP 4, используется цикл foreach, который мы уже неоднократно использовали в этой книге: foreach ($People as $key => $value) echo "$key = $value";

Недостатки косвенного перебора

Косвенный перебор очень прост, а код, написанный с использованием косвенного перебора, очень читаем. Даже если вы вообще не знаете PHP, вы понимаете, что здесь и к чему. Однако косвенный перебор имеет существенные недостатки. Один из недостатков должен сразу броситься вам глаза: если в массиве встретится элемент с индексом 0, то после того, как он будет передан в цикл функцией key(), цикл прекратит свою работу. И еще один недостаток: вы не можете использовать косвенный перебор во вложенных циклах, так как функция NextQ второго цикла изменит положение текущего элемента в первом цикле. Прямой перебор лишен этих недостатков.

6. Сортировка массивов

Для сортировки массивов в PHP предназначено много различных функций, но мы сейчас рассмотрим только основные из них:

asortQ и arsortQ — сортировка по значениям; ksort() — сортировка по ключам;

sort() — сортировка списка;

array_reverce() — «переворачивание» массива; shuffleO — перемешивание списка.

Сортировка массива по значению. Функции asort() и arsort() Функция asortQ выполняет сортировку массива по значениям элементов.

При этом она располагает элементы массива таким образом, что их значения шли в алфавитном порядке (если это строки) или в возрастающем порядке (если это числа). Функция arsortQ выполняет сортировку по значениям в обратном порядке. Предположим, что у нас есть такой массив:

$FIO = array("Sidorov"=>"Nikolay","Ivanov=>"Alexandr","Petrov"=>"Petr");

После выполнения функции asort($FIO) наш массив будет преобразован следующим образом:

array("Ivanov" => "Alexandr", "Sidorov"=>"Nikolay","Petrov"=>"Petr");

Сортировка массивов по ключам. Функции ksort() и krsort()

Для сортировки по ключам используется функция ksort(). При этом сортировка осуществляется по таким же принципам, что и функцией asortQ, только не по значению, а по ключам. Если передать ей наш массив $FIO, то мы получим такой результат:

Сравните полученный результат с результатом функции asort(). Для сетировки ключей в обратном порядке используется функция krsortQ.

Сортировка списка

Все четыре рассмотренные функции не разрывают пары ключ=>значе ние. Это очень важно. Например, у нас есть небольшой список:

$People = array ("Ivanov"=>"555-6677", "Sidorov"=>"345-4567", "Petrov";=>"777 5653");

После сортировки массива по ключам наш список будет выглядеть так-

$People = array("Ivanov"=>"555-6677","Petrov"=>"777- 5653","Sidorov"=>"34:- 4567");

Обратите внимание: пары ключ=>значение не разорваны, то есть у Петрова попрежнему номер телефона 777-5653, а у Сидорова — 345-456" Если бы пары были

разорваны, номер телефона у Петрова был 345-456" а у Сидорова — 777-5653, то есть, наоборот.

Если вам нужно отсортировать список, то удобнее всего использовать; функцию sort(). Данная функция разрывает пары ключ=>значение, поэтому ее нужно использовать только для списков.

Пусть у нас есть список:

$List = array("Name","Address","Email");

Если вывести список в виде ключ=>значение, то мы получим следующий результат:

0 => Name

1 => Address

2 => Email

После сортировки sort($List) у нас получится следующий список:

0 => Address

1 => Email

2 => Name

Изначальная связь между парами ключ=>значение была разорвана. Возникнет как раз та ситуация, которую мы рассматривали на примере с номерами телефонов. Переворачивание массива. Функция array_reverse() Для переворачивания массива используется функция array_reverse(). Эта функция возвращает массив, элементы которого следуют в обратном порядке относительно исходного массива. Например, чтобы отсортировать массив в обратном порядке, можно использовать функцию arsortQ, а можно упорядочить массив в прямом порядке функцией asort() и перевернуть его функцией array_reverse().

Примечание. Если вам нужно отсортировать массив в обратном алфавитном порядке, я рекомендую использовать функцию arsort() — она работает быстрее, чем последовательность функций asort() и array_reverse(). Перемешивание списков. Функция shuffle() Функция shuffle(), так сказать, «перемешивает» список, то есть значения результирующего списка будут размещены в случайном порядке. Данная функция полностью изменяет массив, поэтому ее можно использовать только для списков.

Перед вызовом этой функции нужно инициализировать генератор случайных чисел, иначе при каждом новом вызове функции shuffle() результат перемешивания будет один и тот же (при перемешивании одного и того же массива). Для инициализации генератора случайных чисел используется функция rat_srand():

mt_srand(time 0*100000); shuffle($Arr);

Примечание. Для генерирования случайных чисел рекомендуется использовать функции mt_rand() и mt_srand() вместо стандартных rand() и srand(), поскольку первые обеспечивают лучшее качество генерируемых случайных чисел. Пользовательская сортировка массивов Функции uksort(), uasort() и usort()

Иногда нужно отсортировать массив не в алфавитном порядке, а по более сложному критерию. Для этого используются функции uksortQ, uasortQ и usortQ — пользовательские функции сортировки массивов. Каждой функции нужно передать два параметра:

*массив, который нужно отсортировать;

*функцию сравнения, которая определит, какой из элементов массива меньше, а какой больше, согласно нашему критерию Функции сравнения нужно передать два параметра — два элемента массива

($el_l и $el_2). В свою очередь, функция должна возвратить одно 13 трех значений:

— 1, если $el_K$el_2; 0, если $el_l=$el_2; 1, если $el_K$el_2.

Соседние файлы в предмете Программирование для Web