PHP скрипты

MySQL

Apache

phpMyADmin

8.13: Сортировка массивов

Главная Страница » Книги по PHP » Самоучитель PHP 5 для чайников с примерами » Сортировка массивов в PHP

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

Самая простая и, наверное, самая распространенная функция сортировки - sort(). Она располагает элементы массива в алфавитном порядке (листинг 8.17).

Листинг 8.17. Сортировка массива.

‹html›
‹head›
‹title› Сортировка массива ‹/title›
‹/head›
‹body›
‹?php
$closets = array(0 => "Шорты", 1 => "Майка", 2 => "Кроссовки");
sort($closets);
foreach ($closets as $key => $value)
{
  echo $key . " " . $value . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

Результат выполнения этой программы смотрите ниже.

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

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

Листинг 8.18. Особенности сортировки массива с помощью функции sort().

‹html›
‹head›
‹title› Особенности сортировки массива с помощью функции sort()‹/title›
‹/head›
‹body›
‹?php
$closets = array( 3 => "Шорты", 4 => "Майка", 1 => "Кроссовки");
sort($closets);
foreach ($closets as $key => $value)
{
  echo $key . " " . $value . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

Результат выполнения листинг 8.18 смотрите ниже:

Особенности сортировки массива

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

Еще одна особенность этой функции - необязательный параметр (флаг), который указывает на тип сортируемых значений (листинг 8.19).

Листинг 8.19. Использование необязательных параметров.

‹html›
‹head›
‹title› Использование необязательных параметров ‹/title›
‹/head›
‹body›
‹?php
$closets_1 = array (0 => 2, 1 => 3, 2 => "Кроссовки");
sort($closets_1, SORT_NUMERIC);
foreach ($closets_1 as $key => $value)
{
  echo $key . " " . ;value . "‹br›"; // вывод элемента
}
$closets_2 = array (0 => 2, 1 => 3, 2 => "Кроссовки");
sort($closets_2, SORT_STRING);
foreach ($closets_2 as ;key => ;value)
{
  echo ;key . " " . ;value . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

В первом случае функция воспринимает все значения как числа, поэтому Кроссовки оказались на месте первого элемента (строка преобразовалась в число 0). Во втором случае значения сортируются как строки, поэтому на этот раз строка Кроссовки оказалась на месте последнего элемента. Существует так же третий флаг - S0RT_REGULAR, который указывает на обычную сортировку.

Стоит отметить, что эти необязательные параметры функции sort() появились только в четвертой версии РНР.

Как мы уже говорили, функцию sort() неудобно применять к массивам, где нужно сохранять значение ключей. Для решения этой проблемы применяют функцию asort(), которая работает по аналогичному принципу, но не изменяет индексы элементов (листинг 8.20).

Листинг 8.20. Сортировка массива с помощью функции asort().

‹html›
‹head›
‹title› Сортировка массива с помощью функции asort() ‹/title›
‹/head›
‹body›
‹?php
$closets = array (3 => "Шорты", 4 => "Майка", 1 => "Кроссовки");
asort($closets);
foreach ($closets as $key => $value)
{
echo $key . " " . $value . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

Результат выполнения этой программы смотрите ниже.

Сортировка массива с помощью функции asort()

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

Часто встречаются случаи, когда надо отсортировать элементы массива в обратном порядке. Для этого применяются функции rsort() и arsort(), которые в пояснениях не нуждаются, так как работают аналогично разобранным функциям.

Если есть сортировка элементов массива по значению, то логично было бы добавить сортировку по ключу. Именно эту задачу выполняет функция ksort() - листинг 8.21.

Листинг 8.21. Сортировка массива с помощью функции ksort().

‹html›
‹head›
‹title› Сортировка массива с помощью функции kSort() ‹/title›
‹/head›
‹body›
‹?php
$closets = array ("Петров"=>"Майка", "Иванов"=>"Кроссовки", "Сидоров"=>"Шорты");
ksort ($closets);
foreach ($closets as $key => $value)
{
  echo $key . " " . $value . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

Результат выполнения этой программы смотрите ниже на рисунке.

Сортировка массива с помощью функции kSort()

Наверное, стоит добавить, что существует функция krsort(), которая, как вы поняли, сортирует массив в обратном порядке.

Поделиться с друзьями