- Руководство по сортировке массивов в PHP
- Сортировка индексированных массивов по возрастанию
- Сортировка индексированных массивов по убыванию
- Сортировка ассоциативных массивов в возрастающем порядке по значению
- Сортировка ассоциативных массивов в порядке убывания по значению
- Сортировка ассоциативных массивов в возрастающем порядке по ключу
- Сортировка ассоциативных массивов в порядке убывания по ключу
- Похожие посты
- Руководство по загрузке файлов на сервер в PHP
- Руководство по GET и POST запросам в PHP
- Список сообщений об ошибках в PHP
- Сортировка массивов
- Сортировка массива по ключу
- Результат:
- Сортировка массива по значению
- Результат:
- Результат:
- Естественная сортировка
- Результат:
- Результат:
- Сортировка многомерных массивов
- Результат:
- Сортировка многомерного массива по значению одного ключа
- Результат:
- Перемешать массив
- Результат:
- sort
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Примечания
- Смотрите также
Руководство по сортировке массивов в PHP
В предыдущей главе мы узнали основы массивов PHP, т.е. что такое массивы, как их создавать, как просматривать их структуру, как получить доступ к их элементам и т. д. С массивами можно делать еще больше вещей, например, сортировать элементы в любом порядке.
В PHP есть ряд встроенных функций, разработанных специально для сортировки элементов массивов различными способами, например, в алфавитном, числовом, возрастающем или убывающем порядке. Здесь мы рассмотрим некоторые из этих функций, наиболее часто используемых для сортировки массивов.
- sort() и rsort() — для сортировки индексированных массивов;
- asort() и arsort() — для сортировки ассоциативных массивов по значению;
- ksort() и krsort() — для сортировки ассоциативных массивов по ключу.
Сортировка индексированных массивов по возрастанию
Функция sort() используется для сортировки элементов индексированного массива в порядке возрастания (в алфавитном порядке для букв и в числовом для чисел).
Blue [1] => Green [2] => Red [3] => Yellow ) ?>
Точно так же вы можете отсортировать числовые элементы массива в порядке возрастания.
1 [1] => 2 [2] => 2.5 [3] => 4 [4] => 7 [5] => 10 ) ?>
Сортировка индексированных массивов по убыванию
Функция rsort() используется для сортировки элементов индексированного массива в порядке убывания (в алфавитном порядке для букв и в числовом для чисел).
Yellow [1] => Red [2] => Green [3] => Blue ) ?>
Аналогичным образом вы можете отсортировать числовые элементы массива в порядке убывания.
10 [1] => 7 [2] => 4 [3] => 2.5 [4] => 2 [5] => 1 ) ?>
Сортировка ассоциативных массивов в возрастающем порядке по значению
Функция asort() сортирует элементы ассоциативного массива в порядке возрастания в соответствии со значением. Она работает так же, как sort() , но сохраняет связь между ключами и их значениями при сортировке.
20, "Harry"=>14, "John"=>45, "Clark"=>35); // Сортируем по значению и печатаем массив asort($age); print_r($age); // Выводит: Array ( [Harry] => 14 [Peter] => 20 [Clark] => 35 [John] => 45 ) ?>
Сортировка ассоциативных массивов в порядке убывания по значению
Функция arsort() сортирует элементы ассоциативного массива в порядке убывания по значению. Она работает так же, как rsort() , но сохраняет связь между ключами и их значениями при сортировке.
20, "Harry"=>14, "John"=>45, "Clark"=>35); // Сортируем по значению и печатаем массив arsort($age); print_r($age); // Выводит: Array ( [John] => 45 [Clark] => 35 [Peter] => 20 [Harry] => 14 ) ?>
Сортировка ассоциативных массивов в возрастающем порядке по ключу
Функция ksort() сортирует элементы ассоциативного массива в порядке возрастания по их ключам. Она сохраняет связь между ключами и их значениями при сортировке, как и функция asort() .
20, "Harry"=>14, "John"=>45, "Clark"=>35); // Сортируем по ключу и печатаем массив ksort($age); print_r($age); // Выводит: Array ( [Clark] => 35 [Harry] => 14 [John] => 45 [Peter] => 20 ) ?>
Сортировка ассоциативных массивов в порядке убывания по ключу
Функция krsort() сортирует элементы ассоциативного массива в порядке убывания их ключей. Она сохраняет связь между ключами и их значениями при сортировке, как и функция arsort() .
20, "Harry"=>14, "John"=>45, "Clark"=>35); // Сортируем по ключу и печатаем массив krsort($age); print_r($age); // Выводит: Array ( [Peter] => 20 [John] => 45 [Harry] => 14 [Clark] => 35 ) ?>
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 5 / 5. Количество оценок: 2
Оценок пока нет. Поставьте оценку первым.
Похожие посты
Руководство по загрузке файлов на сервер в PHP
В этом руководстве мы узнаем, как загружать файлы на удаленный сервер с помощью простой HTML-формы и PHP. Вы можете загружать файлы любого типа, например изображения, видео, ZIP-файлы, документы Microsoft Office, PDF-файлы, а также исполняемые файлы и множество других типов файлов. Шаг 1. Создание HTML-формы для загрузки файла В следующем примере будет создана простая HTML-форма, которую…
Руководство по GET и POST запросам в PHP
Веб-браузер связывается с сервером, как правило, с помощью одного из двух HTTP-методов (протокола передачи гипертекста) — GET и POST. Оба метода передают информацию по-разному и имеют разные преимущества и недостатки, как описано ниже. PHP-метод GET В методе GET данные отправляются в виде параметров URL, которые обычно представляют собой строки пар имени и значения, разделенные амперсандами…
Список сообщений об ошибках в PHP
Обычно, когда движок PHP сталкивается с проблемой, препятствующей правильной работе скрипта, он генерирует сообщение об ошибке. Существует шестнадцать различных уровней ошибок, и каждый уровень представлен целым числом и связанной с ним константой. Вот список уровней ошибок: Название Значение Описание E_ERROR 1 Неустранимая ошибка времени выполнения от которой невозможно избавиться. Выполнение скрипта немедленно прекращается E_WARNING 2…
Разработка сайтов для бизнеса
Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.
Сортировка массивов
В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в PHP существует множество функций, их подробное описание можно посмотреть на php.net, рассмотрим некоторые примеры.
Сортировка массива по ключу
ksort() и krsort() – сортирует массив по ключу.
$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); // По возрастанию: ksort($array); print_r($array); // По убыванию: krsort($array); print_r($array);
Результат:
Array ( [1] => апельсин [3] => яблоко [5] => виноград ) Array ( [5] => виноград [3] => яблоко [1] => апельсин )
Сортировка массива по значению
Функции sort() и rsort() сортирует массив по значению, при этом не сохраняя ключи.
$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); // По возрастанию: sort($array); print_r($array); // По убыванию: rsort($array); print_r($array);
Результат:
Array ( [0] => апельсин [1] => виноград [2] => яблоко ) Array ( [0] => яблоко [1] => виноград [2] => апельсин )
Чтобы сохранить ключи применяется функции asort() и arsort() .
$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); // По возрастанию: asort($array); print_r($array); // По убыванию: arsort($array); print_r($array);
Результат:
Array ( [1] => апельсин [5] => виноград [3] => яблоко ) Array ( [3] => яблоко [5] => виноград [1] => апельсин )
Естественная сортировка
Выше приведенные функции по умолчанию используют алгоритм Quicksort (быстрая сортировка). Чтобы изменить алгоритм нужно вторым аргументом указать флаг:
SORT_REGULAR | Обычное сравнение элементов (без изменения типов) |
SORT_NUMERIC | Числовое сравнение элементов |
SORT_STRING | Строковое сравнение элементов |
SORT_LOCALE_STRING | Сравнивает элементы как строки с учетом текущей локали. |
SORT_NATURAL | Также как natsort() |
SORT_FLAG_CASE | Может быть объединен с SORT_STRING или SORT_NATURAL для сортировки строк без учета регистра. |
Привычную для человека сортировку делают функции natsort() , natcasesort() или флаг SORT_NATURAL .
natcasesort() сортирует массив без учета регистра символов.
Разницу можно увидеть в примере:
$array = array(-1, 0, 10, 'текст', 'a', 'b'); // Quicksort: sort($array); print_r($array); // Natural order: natsort($array); print_r($array);
Результат:
Array ( [0] => -1 [1] => a [2] => b [3] => 0 [4] => текст [5] => 10 ) Array ( [0] => -1 [1] => 0 [2] => 10 [4] => a [5] => b [3] => текст )
У natsort() нет возможности изменить направление сортировки, поэтому можно применить функцию array_reverse() .
natsort($array); $array = array_reverse($array); print_r($array);
Результат:
Array ( [0] => текст [1] => b [2] => a [3] => 10 [4] => 0 [5] => -1 )
Сортировка многомерных массивов
array_multisort() сортирует многомерные массивы по значению, также может отсортировать сразу несколько массивов.
$array = array( array(20, 222, 2, 22), array(10, 111, 1, 11), ); array_multisort($array); print_r($array);
Результат:
Array ( [0] => Array( [0] => 10 [1] => 111 [2] => 1 [3] => 11 ) [1] => Array( [0] => 20 [1] => 222 [2] => 2 [3] => 22 ) )
Чтобы изменить направление сортировки вторым аргументом функции указывается SORT_ASC или SORT_DESC .
array_multisort($array, SORT_DESC); print_r($array);
Сортировка многомерного массива по значению одного ключа
Есть несколько вариантов, первый – uasort() , сортирует массив, используя пользовательскую функцию для сравнения элементов и сохранением ключей.
В примере сортировка идет по ключу « count ».
$array = array( array( 'sku' => '645908-463', 'count' => '1' ), array( 'sku' => '64590644', 'count' => '20' ), array( 'sku' => '7543', 'count' => '2' ) ); // По возрастанию: function cmp_function($a, $b) < return ($a['count'] >$b['count']); > uasort($array, 'cmp_function'); print_r($array); // По убыванию: function cmp_function_desc($a, $b) < return ($a['count'] < $b['count']); >uasort($array, 'cmp_function_desc'); print_r($array);
Результат:
Array ( [0] => Array( [sku] => 645908-463 [count] => 1 ) [2] => Array( [sku] => 7543 [count] => 2 ) [1] => Array( [sku] => 64590644 [count] => 20 ) ) Array ( [1] => Array( [sku] => 64590644 [count] => 20 ) [2] => Array( [sku] => 7543 [count] => 2 ) [0] => Array( [sku] => 645908-463 [count] => 1 ) )
Второй вариант на основе функции array_multisort() :
function array_multisort_value() < $args = func_get_args(); $data = array_shift($args); foreach ($args as $n =>$field) < if (is_string($field)) < $tmp = array(); foreach ($data as $key =>$row) < $tmp[$key] = $row[$field]; >$args[$n] = $tmp; > > $args[] = &$data; call_user_func_array('array_multisort', $args); return array_pop($args); > $array = array( array( 'sku' => '645908-463', 'count' => '1' ), array( 'sku' => '64590644', 'count' => '20' ), array( 'sku' => '7543', 'count' => '2' ) ); $array = array_multisort_value($array, 'count', SORT_DESC); print_r($array);
Перемешать массив
Функция shuffle() перемешивает массив в случайном порядке, не сохроняя ключи.
$array = array( 1 => 'яблоко', 2 => 'апельсин', 3 => 'виноград' ); shuffle($array); print_r($array); shuffle($array); print_r($array);
Результат:
Array ( [0] => виноград [1] => яблоко [2] => апельсин ) Array ( [0] => виноград [1] => апельсин [2] => яблоко )
sort
Эта функция сортирует массив. После завершения работы функции элементы массива будут расположены в порядке возрастания.
Список параметров
Дополнительный второй параметр sort_flags можно использовать для изменения поведения сортировки, используя следующие значения:
- SORT_REGULAR — обычное сравнение элементов (без изменения типов)
- SORT_NUMERIC — числовое сравнение элементов
- SORT_STRING — строковое сравнение элементов
- SORT_LOCALE_STRING — сравнивает элементы как строки с учетом текущей локали. Используется локаль, которую можно изменять с помощью функции setlocale()
- SORT_NATURAL — сравнение элементов как строк, используя естественное упорядочение, аналогичное упорядочению в функции natsort()
- SORT_FLAG_CASE — может быть объединен (побитовое ИЛИ) с константами SORT_STRING или SORT_NATURAL для сортировки строк без учета регистра.
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.4.0 | Добавлена поддержка SORT_NATURAL и SORT_FLAG_CASE в параметре sort_flags |
5.0.2 | Добавлена поддержка SORT_LOCALE_STRING |
Примеры
Пример #1 Пример использования sort()
$fruits = array( «lemon» , «orange» , «banana» , «apple» );
sort ( $fruits );
foreach ( $fruits as $key => $val ) echo «fruits[» . $key . «] = » . $val . «\n» ;
>
Результат выполнения данного примера:
fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange
Фрукты отсортированы в алфавитном порядке.
Пример #2 Пример использования sort() с регистронезависимым естественным упорядочением
$fruits = array(
«Orange1» , «orange2» , «Orange3» , «orange20»
);
sort ( $fruits , SORT_NATURAL | SORT_FLAG_CASE );
foreach ( $fruits as $key => $val ) echo «fruits[» . $key . «] = » . $val . «\n» ;
>
Результат выполнения данного примера:
fruits[0] = Orange1 fruits[1] = orange2 fruits[2] = Orange3 fruits[3] = orange20
Фрукты были отсортированы аналогично функции natcasesort() .
Примечания
Замечание: Эта функция присваивает новые ключи элементам массива . Она удалит все существующие ключи, а не просто переупорядочит их.
Замечание: Как и большинство функций сортировки в PHP, sort() использует реализацию алгоритма » быстрой сортировки. Основной элемент выбирается из середины сортируемой части, достигая таким образом оптимального времени для уже отсортированных массивов. Следует иметь в виду, что это является деталью реализации и на нее не следует полагаться.
Будьте осторожны при сортировке массивов, содержащих элементы разных типов, так как в этом случае результат работы функции sort() может быть непредсказуемым.