Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка(ОВП).doc
Скачиваний:
1
Добавлен:
19.11.2019
Размер:
291.33 Кб
Скачать
    1. Сортировка массивов

Использование функции sort()

Следующий код приводит к упорядочению массива в алфавитном порядке:

$products = array (“Tires”, Oil”, Spark Plugs”);

sort($products);

Теперь элементы массива будут расположены в следующем порядке: Oil, Spark Plugs, Tires.

С помощью данной функции можно упорядочивать значения и в цифровом порядке. Например, массив, содержащий цены на товары. Необходимо помнить, что функция sort() зависит от регистра, т.е. прописные буквы предшествуют строчным.

Использование функций asort() и ksort()

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

$prices = array( “Tires” => 100, “Oil” => 10, “Spark Plugs” >= 4);

asort($prices);

Функция asort() упорядочивает массив в соответствии со значениями элементов. В данном массиве значения – это цены, а ключи – текстовые описания. Если сортировку следует выполнить не по ценам, а по описаниям, следует использовать функцию ksort().

Сортировка в обратном порядке

Каждая из рассмотренных ранее функций имеет соответствующую ей функцию, выполняющую сортировку массива в порядке убывания. Это rsort(), arsort() и krsort().

    1. Сортировка многомерных массивов

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

Мы рассматривали двумерный массив, в котором хранились названия товаров их коды и цены.

$products = array( array(“TIR”, “Tires”, 100),

array(“OIL”, “Oil”,10),

array(“SPK”, “Spark Plugs”, 4));

Каков будет порядок значений, если выполнить сортировку в этом массиве? Существует два полезных порядка сортировки. Товары можно упорядочить в алфавитном порядке по описаниям или в цифровом порядке по ценам. И то, и другое возможно. Для этого необходимо использовать функцию usort() и указать PHP, как следует сравнивать элементы. Для этого потребуется создать собственную функцию сравнения.

Следующий код выполняет сортировку этого массива в алфавитном порядке по значению второго столбца – описания.

function compare($x, $y)

{

if ( $x[1] ==$y[1] )

return 0;

else if ( $x[1] < $y[1] )

return –1;

else

return 1;

}

usort($products, compare);

Назначение данной функции – принять два значения (два аргумента x и y) и определить их порядок. Применительно к рассмотренному примеру параметрами x и y будут два массива внутри основного массива, каждый из которых представляет один из товаров. Чтобы обратиться к элементу Description массива x, необходимо ввести $x[1], поскольку Description – второй элемент в этом массиве, а нумерация начинается с нуля. Когда функция завершает работу, она может сообщить ответ вызвавшему ее коду. Это значение называется возвращаемым. Для возврата значения в функции используется ключевое слово return. Например, строка return 1; возвращает значение 1 коду, вызвавшему функцию.

Чтобы она могла использоваться функцией usort(), функция compare() должна сравнивать x и y. В зависимости от их значений рассмотренная функция будет возвращать значения 0, 1 или –1.

Символ “u” в имени usort() означает пользовательская, поскольку этой функции требуется определенная пользователем функция сравнения. Аналогичные обозначения используются для всех функций сортировки рассмотренных ранее. Для выполнения сортировки многомерных массивов в обратном порядке пользователю необходимо создать функцию сравнения, которые будет возвращать противоположные значения.

function compare1($x, $y)

{

if ( $x[2] ==$y[2] )

return 0;

else if ( $x[2] < $y[2] )

return 1;

else

return -1;

}

usort($products, compare1);

Теперь вызов функции usort() приведет к упорядочению массива в порядке убывания цен.