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

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

Решение
Для сортировки массива в общепринятом смысле этого слова используйте функцию 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.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Добавление одного массива к другому
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива

Вернуться в раздел: PHP / 4. Массивы