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

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

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

1
2
3
4
5
6
7
8
<?php
$closets = array(0 => "Шорты",1 => "Майка",2 => "Кроссовки"); 
sort(Sclosets);
foreach ($closets as $key => $value) 
{
echo $key . " " . $value . "<br>"; // вывод элемента
}
?>

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

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

1
2
3
4
5
6
7
8
<?php
Sclosets = array(3 => "Шорты",4 => "Майка",1 => "Кроссовки"); 
sort($closets);
foreach (Sclosets as $key => Svalue) 
{
echo $key . " " . Svalue . "<br>"; // вывод элемента
}
?>

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$closets_1 = array(0 => 2,1 => 3,2 => "Кроссовки");
sort($closets_1,   SORT_NUMERIC); 
foreach ($closets_1 as $key => $value) 
{
echo $key . " " . Svalue . "<br>"; // вывод элемента
}
$closets_2 = array(0 => 2,1 => 3,2 => "Кроссовки");
sort($closets_2,  SORT_STRING);
foreach ($closets_2 as Skey => Svalue)
{
echo Skey . " " . Svalue . "<br>"; // вывод элемента
}
?>

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

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

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

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

1
2
3
4
5
6
7
8
<?php
$closets = array(3 => "Шорты",4 => "Майка",1 => "Кроссовки"); 
asort($closets);
foreach (Sclosets as $key => $value) 
{
echo $key . " " . $value . "<br>"; // вывод элемента
}
?>

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

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

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

1
2
3
4
5
6
7
8
9
<?php 
$closets=
array("Петров"=>"Майка", "Иванов"=>"Кроссовки","Сидоров"=>"Шорты"); 
ksort(Sclosets);
foreach (Sclosets as Skey => Svalue) 
{
echo $кеу . " " . Svalue . "<br>"; // вывод элемента
}
?>

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

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100