Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

Необходимо отсортировать массив определенным образом.

Решение

Для сортировки массива в общепринятом смысле этого слова используйте функцию sort():

$states = array('Delaware', 'Pennsylvania', 'New Jersey');
sort($states);

Для сортировки в числовом порядке передайте SORT_NUMERIC в качестве второго аргумента функции sort().

$scores = array(1, 10, 2, 20);
sort($scores, SORT_NUMERIC);

Числа будут отсортированы в порядке возрастания (1, 2, 10, 20) вместо лексикографического порядка (1, 10, 2, 20).

Обсуждение

Функция sort() не сохраняет связи ключ/значение между элементами; вместо этого она реиндексирует элементы, начиная с 0 по возрастанию. (Единственным исключением является одноэлементный массив; индекс его единственного элемента не сбрасывается в 0. Это исправлено, начиная с версии PHP 4.2.3.)

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

$states = array(1 => 'Delaware', 'Pennsylvania', 'New Jersey');
asort($states);

while (list($rank, $state) = each($states)) {
       print "$state was the #$rank state to join the United States\n";
}

Используйте функцию natsort() для упорядочения массива по естественному алгоритму сортировки. При естественной сортировке можно смешивать строки и числа внутри элементов и получать при этом правильный результат.

$tests = array('test1.php', 'test10.php', 'test11.php', 'test2.php');
natsort($tests);

Теперь элементы расположены по порядку: 'test1.php', 'test2.php', 'test10.php' и 'test11.php'. При естественной сортировке число 10 располагается после числа 2; обычная сортировка приведет к противоположному результату. Для выполнения нечувствительной к регистру естественной сортировки используйте функцию natcasesort().

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

См. также

Документацию по функции sort() на http://www.php.net/sort, по функции asort() на http://www.php.net/asort, по функции natsort() на http://www.php.net/natsort, по функции natcasesort() на http://www.php.net/natcasesort, по функции rsort() на http://www.php.net/rsort и по функции arsort() на http://www.php.net/arsort.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ