php array sort callback

Php array sort callback

(PHP 3 >= 3.0.3, PHP 4, PHP 5)

Описание bool usort ( array &array, callback cmp_function )

Эта функция сортирует элементы массива, используя для сравнения значений пользовательскую функцию. Если вам нужно отсортировать массив по необычному критерию, вы должны использовать эту функцию.

Функция, используемая для сравнения, должна возвращать целое число, меньшее, равное или большее нуля, если первый аргумент соответственно меньше, равен или больше второго.

Замечание: Если два элемента исходного массива равны, их порядок в отсортированном массиве неопределён. До PHP 4.0.6 пользовательские функции сохраняли для таких элеменов порядок в оригинальном массиве, но новый алгоритм сортировки, появившейся в версии 4.1.0 больше не использует это решение и не имеет другого эффективного.

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Пример 1. Пример использования usort()

Результат выполнения данного примера:

0: 1 1: 2 2: 3 3: 5 4: 6

Пример 2. Пример использования функцией usort() многомерных массивов

$fruits [ 0 ][ «fruit» ] = «lemons» ;
$fruits [ 1 ][ «fruit» ] = «apples» ;
$fruits [ 2 ][ «fruit» ] = «grapes» ;

Результат выполнения данного примера:

Пример 3. Пример использования usort() с методом класса

$a [] = new TestObj ( «c» );
$a [] = new TestObj ( «b» );
$a [] = new TestObj ( «d» );

Источник

uasort

(PHP 4, PHP 5, PHP 7, PHP 8)

uasort — Сортирует массив, используя пользовательскую функцию для сравнения элементов с сохранением ключей

Описание

Сортирует array таким образом, чтобы его ключи сохраняли свою корреляцию со значениями, с которыми они связаны, с использованием определяемой пользователем функции сравнения.

Это обычно используется при сортировке ассоциативных массивов, в которых важен актуальный порядок элементов.

Если оба сравниваемых значения эквивалентны, они сохраняют свой первоначальный порядок. До PHP 8.0.0 их относительный порядок в отсортированном массиве не был определён.

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

Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим, чем второй.

Возвращаемые значения

Примеры

Пример #1 Простой пример использования uasort()

Результат выполнения данного примера:

Смотрите также

User Contributed Notes 19 notes

a quick reminder on the syntax if you want to use uasort in a Class or Object:

User «php at clement dot hk» already provided a stable uasort function, but I find this wrapper much shorter and easier to understand:

//this fix the problem of if any of these sort functions evaluates two members as equal then the order is undefined (the sorting is not stable).

Array (
[ 100 ] => Array
(
[ id ] => cent
[ aa ] => 100100
)

[ 2 ] => Array
(
[ id ] => deux
[ aa ] => 22
)

[ 10 ] => Array
(
[ id ] => dix
[ aa ] => 1010
)

Array (
[ 0 ] => Array
(
[ id ] => cent
[ aa ] => 100100
)

[ 1 ] => Array
(
[ id ] => deux
[ aa ] => 22
)

[ 2 ] => Array
(
[ id ] => dix
[ aa ] => 1010
)

I tried using some of the previous built multisorts, but they weren’t working as expected.

So, I made my own Class, and it seems to work wonderfully.

Is it just me, or are the examples below misleading, and actually demonstrating situations that would be more appropriate for usort()?

After trying to make sense of the uasort() description, it sounds like it’s more for sorting a 1D array like this:

$array[0][‘Fator1’]=7;
$array[0][‘Fator2’]=»Name»;
$array[1][‘Fator1’]=5;
$array[1][‘Fator2’]=»Name»;
$array[2][‘Fator1’]=7;
$array[2][‘Fator2’]=»NameDiferente»;
.

We want to order by Fator1, then Fator2, then:

Источник

sort — Сортирует массив

Описание

Эта функция сортирует массив. После завершения работы функции элементы массива будут расположены в порядке возрастания.

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

Дополнительный второй параметр sort_flags можно использовать для изменения поведения сортировки, используя следующие значения:

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

ВерсияОписание
5.4.0Добавлена поддержка SORT_NATURAL и SORT_FLAG_CASE в параметре sort_flags
5.0.2Добавлена поддержка SORT_LOCALE_STRING

Примеры

Пример #1 Пример использования sort()

Результат выполнения данного примера:

Фрукты отсортированы в алфавитном порядке.

Пример #2 Пример использования sort() с регистронезависимым естественным упорядочением

Результат выполнения данного примера:

Примечания

Замечание: Как и большинство функций сортировки в PHP, sort() использует реализацию алгоритма » быстрой сортировки. Основной элемент выбирается из середины сортируемой части, достигая таким образом оптимального времени для уже отсортированных массивов. Следует иметь в виду, что это является деталью реализации и на нее не следует полагаться.

Будьте осторожны при сортировке массивов, содержащих элементы разных типов, так как в этом случае результат работы функции sort() может быть непредсказуемым.

Источник

Сортировка массивов в php: ksort, asort и прочие sort’ы

Поговорим о сортировке массивов.

Более подробную информацию и примеры вы всегда можете найти в документации по функциям сортировки.

Допустим у нас есть массив

Он неправильно отсортирован, как видите ключи (1,2,3) и значения (виноград, арбуз, банан) идут не по порядку. Давайте это исправим:

Сортировка массива по ключу

Сортировка массива по значению

Свои способы сортировки

Если предложенные способы сортировки вам не подходят, то можно создать свой способ сортировки ключей и значений массивов. Для этого есть 3 функции uasort, uksort и usort. С их помощью мы можем задать свою callback функцию, которая будет сравнивать элементы между собой и определять какой из них «больше» и какой «меньше».

Давайте рассмотрим как они работают напримере функции uasort, которая сравнивает значения с сохранением ключей.

Применить нашу новую функцию можно так:

Сохранение ключей означает, что каждый ключ как бы привязан к своему значению.

Если сортировка не дает ожидаемый результат, то изучите флаги сортировки. По умолчанию используется обычный тип сортировки SORT_REGULAR

Флаги типа сортировки:

Флаг сортировки передается в функцию сортировки, например так:

Сортировка многомерных массивов

Создадим функцию, которая нам поможет в сортировке массивов

Пример работы этой функции array_orderby() :

Если вам нужно что-то совсем уж специфическое при сортировки многомерных массивов

Можете создать и другие callback функции сортировки самостоятельно.

Массивы на «стероидах»

Часто работаете с массивами? Тогда вам понравится это расширение для работы с коллекциями.

Рассмотрим несколько примеров.

Простая сортировка чисел:

Сортировка по одной «колонке» ассоциативного массива:

Сортировка по нескольким аттрибутам одновременно:

Вы также можете использовать свои функции сортировки при работе с коллекциями:

Коллекции позволяют работать с массивами как в Laravel и функции этого замечательного инструмента далеко не ограничиваются сортировкой.

Изучите документацию и вы влюбитесь в коллекции.

Источник

usort — Сортирует массив по значениям используя пользовательскую функцию для сравнения элементов

Описание

Эта функция сортирует элементы массива, используя для сравнения значений callback-функцию, предоставленную пользователем. Используйте эту функцию, если вам нужно отсортировать массив по какому-нибудь необычному признаку.

Если два элемента исходного массива равны, их порядок относительно друг друга в отсортированном массиве не определён.

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

Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

ВерсияОписание
4.1.0Представлен новый алгоритм сортировки. Функция value_compare_func не сохраняет исходный порядок одинаковых элементов.

Примеры

Пример #1 Пример использования usort()

Результат выполнения данного примера:

Пример #2 Пример использования функции usort() с многомерными массивами

$fruits [ 0 ][ «fruit» ] = «lemons» ;
$fruits [ 1 ][ «fruit» ] = «apples» ;
$fruits [ 2 ][ «fruit» ] = «grapes» ;

Результат выполнения данного примера:

Пример #3 Пример использования usort() с методом класса

$a [] = new TestObj ( «c» );
$a [] = new TestObj ( «b» );
$a [] = new TestObj ( «d» );

Результат выполнения данного примера:

Пример #4 Пример использования функции usort() с применением анонимной функции для сортировки многомерного массива

Результат выполнения данного примера:

Смотрите также

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *