krsort
Замечание:
Если оба сравниваемых значения эквивалентны, они сохраняют свой первоначальный порядок. До PHP 8.0.0 их относительный порядок в отсортированном массиве не был определён.
Замечание:
Сбрасывает внутренний указатель массива на первый элемент.
Список параметров
Необязательный второй параметр flags может использоваться для изменения поведения сортировки с использованием следующих значений:
- SORT_REGULAR — обычное сравнение элементов; подробности описаны в разделе операторы сравнения
- SORT_NUMERIC — числовое сравнение элементов
- SORT_STRING — строковое сравнение элементов
- SORT_LOCALE_STRING — сравнение элементов как строки на основе текущего языкового стандарта. Используется языковой стандарт, который можно изменить с помощью setlocale()
- SORT_NATURAL — сравнение элементов как строки, используя «естественный порядок», например natsort()
- SORT_FLAG_CASE — можно объединять (побитовое ИЛИ) с SORT_STRING или SORT_NATURAL для сортировки строк без учёта регистра
Возвращаемые значения
Функция всегда возвращает true .
Список изменений
| Версия | Описание |
|---|---|
| 8.2.0 | Тип возвращаемого значения теперь true ; ранее было bool . |
Примеры
Пример #1 Пример использования krsort()
$fruits = array( «d» => «lemon» , «a» => «orange» , «b» => «banana» , «c» => «apple» );
krsort ( $fruits );
foreach ( $fruits as $key => $val ) echo » $key = $val \n» ;
>
?>?php
Результат выполнения данного примера:
d = lemon c = apple b = banana a = orange
Смотрите также
- sort() — Сортирует массив по возрастанию
- ksort() — Сортирует массив по ключу в порядке возрастания
- Сравнение функций сортировки массивов
User Contributed Notes 2 notes
18 years ago
To create a natural reverse sorting by keys, use the following function:
function natkrsort ( $array )
$keys = array_keys ( $array );
natsort ( $keys );
foreach ( $keys as $k )
$new_array [ $k ] = $array [ $k ];
>
$new_array = array_reverse ( $new_array , true );
20 years ago
Best deal sorting:
This is a function that will sort an array with integer keys (weight) and float values (cost) and delete ‘bad deals’ — entries that are more costly than other entries that have greater or equal weight.
Input: an array of unsorted weight/cost pairs
Output: none
function BEST_DEALS($myarray)
< // most weight for least cost:
// ? Peter Kionga-Kamau, http://www.pmkmedia.com
// thanks to Nafeh for the reversal trick
// free for unrestricted use.
krsort($myarray, SORT_NUMERIC);
while(list($weight, $cost) = each($myarray))
< // delete bad deals, retain best deals:
if(!$lastweight)
$lastweight=$weight;
$lastcost = $cost;
>
else if($cost >= $lastcost) unset($myarray[$weight]);
else
$lastweight=$weight;
$lastcost = $cost;
>
>
ksort($myarray);
>
- Функции для работы с массивами
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_diff_assoc
- array_diff_key
- array_diff_uassoc
- array_diff_ukey
- array_diff
- array_fill_keys
- array_fill
- array_filter
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_is_list
- array_key_exists
- array_key_first
- array_key_last
- array_keys
- array_map
- array_merge_recursive
- array_merge
- array_multisort
- array_pad
- array_pop
- array_product
- array_push
- array_rand
- array_reduce
- array_replace_recursive
- array_replace
- array_reverse
- array_search
- array_shift
- array_slice
- array_splice
- array_sum
- array_udiff_assoc
- array_udiff_uassoc
- array_udiff
- array_uintersect_assoc
- array_uintersect_uassoc
- array_uintersect
- array_unique
- array_unshift
- array_values
- array_walk_recursive
- array_walk
- array
- arsort
- asort
- compact
- count
- current
- end
- extract
- in_array
- key_exists
- key
- krsort
- ksort
- list
- natcasesort
- natsort
- next
- pos
- prev
- range
- reset
- rsort
- shuffle
- sizeof
- sort
- uasort
- uksort
- usort
- each
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Сортировка массива по значению
Сортировка пользовательской функцией: usort().
usort($array, function($a, $b)< return ($a['price'] - $b['price']); >);Отслеживать
ответ дан 20 авг 2012 в 11:27
xEdelweiss xEdelweiss
9,114 17 17 серебряных знаков 31 31 бронзовый знак
А как эту функцию забахать в шаблон smarty?
22 авг 2012 в 7:27Стоит ли это делать в представлении? Передавайте уже отсортированный массив, либо сортируйте JavaScript’ом. А вообще, если очень хочется:
/* PHP-код */ 22 авг 2012 в 7:29
$data = array ( array( 'name' => 'title 1', 'price' => 200 ), array( 'name' => 'title 2', 'price' => 100 ) ); usort ( $data, create_function ( '$a,$b', 'return -($a["price"] - $b["price"]);' #возврат нужного значения ) );1) не забываем, что поля price должны быть int, а не строками (в противном случае нужно явное преобразование)
2) если нужно обратный порядок сортировки:
return $a["price"] - $b["price"];Сортировка массива на PHP
Одна из типичных задач, с которыми сталкивается разработчик на PHP, — это сортировка массива. В языке программирования PHP можно выполнять сортировку (sorting) массива и по значению, и по ключу, можно делать естественную сортировку, сортировку многомерных и ассоциативных массивов (arrays) и т. д. Для всего этого предусмотрено множество функций. Кратко рассмотрим некоторые из них.
Сортировка позволяет выполнить упорядочение (ordering) данных в какой-нибудь структуре данных, в нашем случае — в массиве. Получение нужного порядка сортировки может быть необходимо для решения задач, поставленных перед разработчиком.
Функции ksort и krsort
Вышеописанные функции могут применяться в PHP для выполнения сортировки массива по ключу. Работает это следующим образом:
Порядок сортировки (ordering) будет следующим:
Обратите внимание, что элементы массива были отсортированы не по алфавиту, а по ключу, в нашем случае — это нужный порядок (order) цифр. Таким образом данные были упорядочены (ordered, sorted) с учетом ключей.
Функции sort и rsort
Функция sort (как и resort ) сортирует (sorts) заданный массив по значению, не сохраняя ключи. Рассмотрим пример:
// Выполняем сортировку PHP массива по возрастанию:
// Выполняем сортировку PHP массива по убыванию:
А теперь любопытно взглянуть на результат сортировки массива в PHP по значению. Код возвращает следующий результат:
Мы видим, что значения были упорядочены в алфавитном порядке (в прямом, а потом в обратном).
Функции asort и arsort
Если надо, чтобы функция при сортировке (ordering) все-таки сохраняла ключи, пригодится function asort либо arsort .
Мы опять упорядочили данные по значению в прямом и обратном алфавитном порядке. Механизм работы похож на sort, но есть разница, которая заключается в том, что была сохранена связка «ключ-значение». Что это может значить на практике? К примеру, функция подойдет при упорядочении тех же ассоциативных массивов в PHP, то есть в ситуациях, когда связь в структуре важна и логична.
Функция PHP usort
С помощью usort можно отсортировать многомерный массив по необходимому полю. То есть у нас есть возможность выполнить sorting, не сохраняя связку «ключ-значение», но с учетом пользовательской функцией, имя которой можно передать при вызове usort в качестве второго параметра: usort($array, ‘function’) .
Саму функцию описывают отдельно. Как может выглядеть код:
function mySort($a, $b)
if ($a[‘id’] == $b[‘id’]) return 0;
return $a[‘id’] > $b[‘id’] ? 1 : -1;
Далее надо будет сделать вызов функции usort($array, ‘mySort’) в нужном месте кода, а в качестве 1-го параметра указать имя переменной массива.
Shuffle
При необходимости можно выполнить и смешивание. Для этого используется функция shuffle . В результате ее работы все значения смешиваются в случайном порядке, причем ключи не сохраняются.
Давайте вернемся к нашим городам и выполним смешивание два раза. Почему два? Это позволит убедиться в определенной случайности процесса перемешивания. В нашем случае дважды будет получен разный результат:

- https://snipp.ru/php/sort-array;
- http://cccp-blog.com/koding/sortirovka-massiva-php-razlichnymi-sposobami.
Хотите знать намного больше? Добро пожаловать на курс!
Как сортировать массивы в PHP
Определенную информацию всегда легче получать из отсортированных данных, в обратном случае вам приходится пересматривать по очереди каждый элемент массива. Например, предположим, что вы храните оценки разных учеников одного класса в массиве или таблице. Если данные не отсортированы по оценкам, вам нужно пересмотреть оценку каждого учащегося, чтобы определить, кто получил самую высокую или или самую низкую. Если данные уже отсортированы от самой низкой к более высокой, то просто взглянув на оценку первого ученика, вы будете знать этот показатель.
Сортировка делает много простых и еффективных задач на основе доступа или получения определенного набора данных. В этом уроке мы узнаем, как использовать встроенные функции PHP для сортировки различных типов массивов.
Сортировка массива по значению
Сортировка PHP массива по значению его элементов очень проста. Вы можете выбрать сохранение или отклонение ассоциативных массивов, а также назначить собственные функции, чтобы определить порядок сортировки элементов. В этой статье я покажу, как это сделать .
Для сортировки значений массива от низкого к высокому вы можете использовать функцию sort(&$array, $sort_flags) . Однако, при сортировке массива он не будет поддерживать никаких ассоциаций ключевых значений. Вместо простой перестановки новые ключи назначаются отсортированным элементам. Необязательный второй параметр указывает порядок сортировки элементов и может иметь шесть разных значений:
- SORT_REGULAR — сортировка значений без изменения их типов.
- SORT_NUMERIC — сортировка значений путем их численного сравнения.
- SORT_STRING — сортировка значений, сравнивая их как стринги.
- SORT_LOCALE_STRING — сравнивание значений в виде строки в текущей локалке. Вы можете обновить локалку самостоятельно, используя setlocale() .
- SORT_NATURAL — сортирует элементы, используя «естественный порядок» и сравнивая их как строки.
- SORT_FLAG_CASE — этот параметр можно комбинировать с SORT_STRING или SORT_NATURAL для отключения чувствительности к регистру при сортировке строк.
Вот несколько примеров, которые помогут вам быстро понять разницу между всеми типами сортировки.
$random_data = [32508, 98134, "234984", "3249832", "38", 123, "Apple"];
sort($random_data);
echo "Regular Sorting — ";
foreach($random_data as $element)
echo str_pad($element, 9)." ";
// Regular Sorting — 38 123 32508 98134 234984 3249832 Applesort($random_data, SORT_NUMERIC);
echo "\nNumeric Sorting — ";
foreach($random_data as $element)
echo str_pad($element, 9)." ";
// Numeric Sorting — Apple 38 123 32508 98134 234984 3249832sort($random_data, SORT_STRING);
echo "\nString Sorting — ";
foreach($random_data as $element)
echo str_pad($element, 9)." ";
// String Sorting — 123 234984 3249832 32508 38 98134 AppleВ примере обычной сортировки числовые строки преобразуются в их числовые значения, и сортировка выполняется соответствующим образом. Строка «Apple» не является числовой, поэтому она остается нетронутой и сравнивается как строка.
Во втором примере наводится числовая сортировка, и мы хотим, чтобы данные сортировались по числовому значению, поэтому «Apple» преобразуется в числовое значение 0 и идет первым. Остальные значения отсортированы ожидаемым образом.
В третьем примере все значения обрабатываются как строки. Это означает, что вместо сравнения числового значения 123 или 3249832 с 38 они сравниваются как строки — по одному символу за раз. Поскольку «1» предшествует «3», значение 123 считается ниже 38.
Если вы хотите отсортировать значения массива от высокого к низкому вместо низкого к высокому, вы можете сделать это с помощью функции rsort() . Он принимает все те же параметры, что и sort() , сортируя значения в обратном порядке. Он также не поддерживает ассоциации ключевых значений, поэтому это неподходящий способ для сортировки ассоциативных массивов.
Сортировка ассоциативных массивов
Ассоциации ключевых значений важны, в случае если вы имеете дело с ассоциативными массивами. Рассмотрим следующий пример, где ассоциативный массив используется для хранения имен разных людей и их любимых фруктов. Если вы хотите отсортировать список в алфавитном порядке по названию фруктов, использование функции sort() из предыдущего раздела приведет к потере ассоциативных ключей.
$fruit_preferences = ["James" => "Orange", "John" => "Banana", "Patricia" => "Apple", "Jennifer" => "Mango", "Mary" => "Grapes"];
echo "Before Sorting — \n";
foreach($fruit_preferences as $person=>$preference)
echo $person." likes ".$preference."\n";
Before Sorting —James likes OrangeJohn likes BananaPatricia likes AppleJennifer likes MangoMary likes Grapessort($fruit_preferences);
echo "After Sorting — \n";
foreach($fruit_preferences as $person=>$preference)
echo $person." likes ".$preference."\n";
After Sorting —0 likes Apple1 likes Banana2 likes Grapes3 likes Mango4 likes OrangeКак видите, мы не только потеряли взаимосвязь между людьми и их любимыми фруктами, мы также потеряли имена этих людей. Каждому отсортированному значению был присвоен новый числовой индекс, основанный на его позиции в отсортированном массиве.
Чтобы легко решить эту проблему, в PHP есть две разные функции, поддерживающие взаимосвязь между ассоциациями ключевых значений, сортируя массивы по их значениям. Этими двумя функциями являются asort() и arsort() . Следующий фрагмент кода сортирует тот же массив $fruit_preferences , но использует функцию asort() .
$fruit_preferences = ["James" => "Orange", "John" => "Banana", "Patricia" => "Apple", "Jennifer" => "Mango", "Mary" => "Grapes"];
echo "Before Sorting — \n";
foreach($fruit_preferences as $person=>$preference)
echo $person." likes ".$preference."\n";
Before Sorting —James likes OrangeJohn likes BananaPatricia likes AppleJennifer likes MangoMary likes Grapesasort($fruit_preferences);
echo "After Sorting — \n";
foreach($fruit_preferences as $person=>$preference)
echo $person." likes ".$preference."\n";
After Sorting —Patricia likes AppleJohn likes BananaMary likes GrapesJennifer likes MangoJames likes OrangeКак видно из приведенного выше примера, значение Apple движется к верху, сохраняя при этом свою связь с Patricia. Названия фруктов можно так же легко сортировать и в обратном порядке, используя функцию arsort() .
Обе эти функции принимают те же значения сортировки, как и значения необязательного второго параметра: sort() и rsort() .
Сортировка элементов массива по значению с помощью пользовательских функций
С помощью разных значений вашим потребностям могут соответствовать четыре функции сортировки. Однако иногда ваши критерии сравнения элементов массива могут отличаться.
Допустим, у вас есть массив случайных слов, которые нужно отсортировать по алфавиту. Но перед этим вы ещё хотите их отсортировать по длине. Например, в традиционной алфавитной сортировке zoo будет следовать за apple. С другой стороны, если вы хотите показать сначала короткие слова, а потом длинные, то zoo появится перед apple. В том же наборе букв, ape будет перед zoo из-за алфавитного порядка.
В основном, слова сначала сортируются по длине, а затем слова с одинаковым количеством букв сортируются в алфавитном порядке в пределах своей группы. Этот тип сортировки не встроен в PHP, поэтому нам нужно написать собственную функцию.
Для таких случаев PHP предоставляет вам пару функций, которые можно использовать для передачи массива, подлежащий сортировке, вместе с именем вашей собственной функции сортировки.
Используйте функцию usort() для сортировки значений массива в обычных массивах. Точно так же можно использовать функцию uasort() для сортировки значений в ассоциативных массивах, сохраняя при этом ассоциаций ключевых значений.
Этот фрагмент кода показывает один из способов выполнения данной сортировки.
