- Руководство по сортировке массивов в PHP
- Сортировка индексированных массивов по возрастанию
- Сортировка индексированных массивов по убыванию
- Сортировка ассоциативных массивов в возрастающем порядке по значению
- Сортировка ассоциативных массивов в порядке убывания по значению
- Сортировка ассоциативных массивов в возрастающем порядке по ключу
- Сортировка ассоциативных массивов в порядке убывания по ключу
- Похожие посты
- Руководство по загрузке файлов на сервер в PHP
- Руководство по GET и POST запросам в PHP
- Список сообщений об ошибках в PHP
- Сортировка массивов
- User Contributed Notes 2 notes
- Сортировка массивов
- Сортировка массива по ключу
- Результат:
- Сортировка массива по значению
- Результат:
- Результат:
- Естественная сортировка
- Результат:
- Результат:
- Сортировка многомерных массивов
- Результат:
- Сортировка многомерного массива по значению одного ключа
- Результат:
- Перемешать массив
- Результат:
Руководство по сортировке массивов в 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 есть несколько функций для сортировки массивов, на этой странице даётся их общее описание.
Основные различия между функциями:
- В одних функциях массивы ( array ) сортируются по ключам элементов, в других по значениям: $array[‘ключ’] = ‘значение’;
- В каких-то функциях связь между ключами и значениями после сортировки сохраняется, в каких-то нет. Это может приводить к тому, что ключи будут сбрасываться в числовые значения (0, 1, 2, . ).
- Различия в порядке сортировки: алфавитный, возрастающий, убывающий, числовой, естественный, случайный или определённый пользователем
- Примечание: Все функции сортировки модифицируют переданный массив, а не возвращают отсортированную копию
- Если какая-либо из этих функций сортировки оценивает два элемента как равные, они сохраняют свой исходный порядок. До PHP 8.0.0 их порядок не был определён (сортировка была нестабильной).
Имя функции | Сортирует по | Сохраняет связь ключ — значение | Порядок сортировки | Похожие функции |
---|---|---|---|---|
array_multisort() | значению | строковые ( string ) ключи да, числовые ( int ) — нет | первый массив или настройки сортировки | array_walk() |
asort() | значению | да | по возрастанию | arsort() |
arsort() | значению | да | по убыванию | asort() |
krsort() | ключу | да | по убыванию | ksort() |
ksort() | ключу | да | по возрастанию | krsort() |
natcasesort() | значению | да | естественный, нечувствительный к регистру | natsort() |
natsort() | значению | да | естественный | natcasesort() |
rsort() | значению | нет | по убыванию | sort() |
shuffle() | значению | нет | случайный | array_rand() |
sort() | значению | нет | по возрастанию | rsort() |
uasort() | значению | да | определяется пользователем | uksort() |
uksort() | ключу | да | определяется пользователем | uasort() |
usort() | значению | нет | определяется пользователем | uasort() |
User Contributed Notes 2 notes
While this may seem obvious, user-defined array sorting functions ( uksort(), uasort(), usort() ) will *not* be called if the array does not have *at least two values in it*.
function usortTest ( $a , $b ) var_dump ( $a );
var_dump ( $b );
return — 1 ;
>
$test = array( ‘val1’ );
usort ( $test , «usortTest» );
$test2 = array( ‘val2’ , ‘val3’ );
usort ( $test2 , «usortTest» );
The first array doesn’t get sent to the function.
Please, under no circumstance, place any logic that modifies values, or applies non-sorting business logic in these functions as they will not always be executed.
Another way to do a case case-insensitive sort by key would simply be:
uksort ( $array , ‘strcasecmp’ );
?>
Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.
Сортировка массивов
В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в 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] => яблоко )