php сортировать массив по значению ключа
Как отсортировать массив ассоциативных массивов по значению заданного ключа в PHP?
учитывая этот массив:
Я хочу вроде по цене для:
как я могу это сделать?
16 ответов
вот пример, взятый прямо из руководства и адаптировать к вашему случаю:
PHP 7+
начиная с PHP 7, это можно сделать кратко, используя usort С анонимная функция использует оператор космический корабль для сравнения элементов.
вы можете сделать восходящий вид, как это:
или такой нисходящий вид:
чтобы понять, как это работает, обратите внимание, что usort принимает пользовательскую функцию сравнения, которая должна вести себя следующим образом (из документов):
функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй.
и обратите внимание, что оператор космолет,
возвращает 0, если оба операнда равны, 1, если левый больше, и 1, если справа больше
именно что?!—3—> потребности. На самом деле, почти все оправдание для добавления языка https://wiki.php.net/rfc/combined-comparison-operator что это
делает написание заказа обратных вызовов для использования с usort() легче
PHP 5.3+
PHP 5.3 ввел анонимные функции, но еще не имеет оператора космического корабля. Мы все еще можем использовать usort чтобы отсортировать наш массив, но это немного подробнее и сложнее понять:
возвращение нецелым значения из функции сравнения, такие как float, приведут к внутреннему приведению к целому числу возвращаемого значения обратного вызова. Таким образом, такие значения, как 0.99 и 0.1, будут приведены к целочисленному значению 0, которое будет сравнивать такие значения как equal.
это важная ловушка, чтобы иметь в виду при использовании usort в PHP 5.x! моя первоначальная версия этого ответа сделал эту ошибку, и все же я накопил десять upvotes более тысячи просмотров, по-видимому, никто не заметил серьезной ошибки. Легкость, с которой lackwits как я могу запороть функции компаратора точно причина того, что более простой в использовании оператор космического корабля был добавлен к языку в PHP 7.
поскольку элементы массива сами являются массивами со строковыми ключами, лучше всего определить пользовательскую функцию сравнения. Это довольно быстро и легко сделать. Попробуйте это:
производит следующим образом:
Я закончил на этом:
просто вызовите функцию, передав массив и имя поля массива второго уровня. Например:
можно использовать usort С анонимной функции, например,
Как отсортировать многомерный массив по значению в PHP
Мы можем использовать несколько разных методов для этого. Один из способов использования функции usort().
Используя мультисортный метод, мы можем легко отсортировать многомерный массив на основе его одного или нескольких значений. Давайте посмотрим, как мы можем использовать оба этих метода.
1.Сортировка с использованием usort.
Первый способ сортировки массива — использование функции usort(). Вот код, который мы можем использовать для выполнения этого вида:
Если вы хотите отсортировать массив на основе значений нескольких ключей, тогда вам, возможно, придется написать некоторую сложную логику в функции обратного вызова, чтобы сделать это. Однако существует альтернативный способ использования функции array_multisort(). Array_multisort() может использоваться для сортировки сразу нескольких массивов или многомерного массива одним или несколькими измерениями.
2.Сортировка с использованием array_multisort по значения 1-го ключа.
Теперь посмотрим как использовать функцию array_multisort() чтобы выполнить ту же сортировку, что мы использовали выше.
3.Сортировка с использованием array_multisort по значению 2-х ключей.
Теперь давайте посмотрим, как мы можем сортировать один и тот же массив с помощью значений 2-х ключей массива. В этом примере мы будем сортировать по значению по возрастанию, по убыванию имени.
4.Сортировка с использованием array_multisort по значению с 3-я ключами
Теперь давайте посмотрим, как мы можем сортировать один и тот же массив по 3-я ключами. В этом примере мы будем сортировать по убыванию, по убыванию и имени по возрастанию.
Чтобы не пропускать новые выпуски подписывайтесь на канал @world_hello_ru
array_multisort
(PHP 4, PHP 5, PHP 7, PHP 8)
array_multisort — Сортирует несколько массивов или многомерные массивы
Описание
Функция array_multisort() может быть использована для сортировки сразу нескольких массивов или одного многомерного массива в соответствии с одной или несколькими размерностями.
Ассоциативные ( string ) ключи будут сохранены, но числовые ключи будут переиндексированы.
Если оба сравниваемых значения эквивалентны, они сохраняют свой первоначальный порядок. До PHP 8.0.0 их относительный порядок в отсортированном массиве не был определён.
Список параметров
Сортируемый массив ( array ).
Настройки сортировки для вышеуказанного аргумента array :
Дополнительные массивы, необязательно следующие после порядка сортировки и флагов. Сравниваются только элементы соответствующие таким же элементам в предыдущих массивах. Другими словами, производится сортировка в лексикографическом порядке.
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Сортировка нескольких массивов
Пример #2 Сортировка многомерного массива
В вышеприведённом примере, после сортировки, первый массив будет содержать «10», 100, 100, 11, «a» (его элементы были отсортированы в возрастающем порядке), а второй массив будет содержать 1, 3, «2», 2, 1 (элементы отсортированы как числа, в порядке убывания).
Пример #3 Сортировка результатов из базы данных
В этом примере, каждый элемент массива data представляет собой ряд таблицы. Такой тип данных типичен для записей базы данных.
У нас есть массив строк, но array_multisort() необходим массив столбцов, поэтому сначала мы используем следующий код для получения столбцов, а потом выполним сортировку.
Теперь данные отсортированы и будут выглядеть вот так:
Пример #4 Сортировка без учёта регистра
Обе константы SORT_STRING и SORT_REGULAR учитывают регистр при сортировке, строки, начинающиеся с заглавной буквы будут выставлены раньше строк, начинающихся со строчной буквы.
Для выполнения регистронезависимой сортировки, необходимо использовать копию исходного массива приведённую к нижнему регистру.
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 39 notes
I came up with an easy way to sort database-style results. This does what example 3 does, except it takes care of creating those intermediate arrays for you before passing control on to array_multisort().
I would like to see the next code snippet to be added to http://nl3.php.net/array_multisort
Purpose: Sort a 2-dimensional array on some key(s)
Advantage of function:
— uses PHP’s array_multisort function for sorting;
— it prepares the arrays (needed by array_multisort) for you;
— allows the sort criteria be passed as a separate array (It is possible to use sort order and flags.);
— easy to set/overwrite the way strings are sorted (case insensitive instead of case sensitive, which is PHP’s default way of sorting);
— performs excellent
//Set the sort criteria (add as many fields as you want)
$sortCriteria =
array(‘field1’ => array(SORT_DESC, SORT_NUMERIC),
‘field3’ => array(SORT_DESC, SORT_NUMERIC)
);
A more inuitive way of sorting multidimensional arrays using array_msort() in just one line, you don’t have to divide the original array into per-column-arrays:
arr1 :
0 :
id : 1 (int)
name : aA ( string : 2 )
cat : cc ( string : 2 )
1 :
id : 2 (int)
name : aa ( string : 2 )
cat : dd ( string : 2 )
2 :
id : 3 (int)
name : bb ( string : 2 )
cat : cc ( string : 2 )
3 :
id : 4 (int)
name : bb ( string : 2 )
cat : dd ( string : 2 )
arr2 :
2 :
id : 3 (int)
name : bb ( string : 2 )
cat : cc ( string : 2 )
3 :
id : 4 (int)
name : bb ( string : 2 )
cat : dd ( string : 2 )
0 :
id : 1 (int)
name : aA ( string : 2 )
cat : cc ( string : 2 )
1 :
id : 2 (int)
name : aa ( string : 2 )
cat : dd ( string : 2 )
One-liner function to sort multidimensionnal array by key, thank’s to array_column
USort function can be used to sort multidimensional arrays with almost no work whatsoever by using the individual values within the custom sort function.
This function passes the entire child element even if it is not a string. If it is an array, as would be the case in multidimensional arrays, it will pass the whole child array as one parameter.
Therefore, do something elegant like this:
Easiest way I find out to sort an entire multidimensional array by one element of it:
This is the simpler version of the function by AlberT.
A lot of times you have got an array like this:
You just want to sort on the index in the second dimension, ie. on points in the above example.
You can use the function below and call it like this:
I had a function to make a sort on a 2D array and I wanted to sort an array using a column that usualy contains numeric values but also strings.
Lets say we have this array :
Array (
[0] => Array ( «name» = «12000» ),
[1] => Array ( «name» = «113» ),
[2] => Array ( «name» = «test 01» ),
[3] => Array ( «name» = «15000 tests» ),
[4] => Array ( «name» = «45» ),
[5] => Array ( «name» = «350» ),
[6] => Array ( «name» = «725» ),
[7] => Array ( «name» = «hello» )
>
SORT_STRING whould have returned me this :
Array ( // Numeric values are not correctly sorted
[0] => Array ( «name» = «113» ),
[1] => Array ( «name» = «12000» ),
[2] => Array ( «name» = «15000 tests» ),
[3] => Array ( «name» = «350» ),
[4] => Array ( «name» = «45» ),
[5] => Array ( «name» = «725» ),
[6] => Array ( «name» = «hello» ),
[7] => Array ( «name» = «test 01» )
>
SORT_NUMERIC would have returned me this :
Array ( // String values are not sorted, just in the same order
[0] => Array ( «name» = «test 01» ),
[1] => Array ( «name» = «hello» ),
[2] => Array ( «name» = «45» ),
[3] => Array ( «name» = «113» ),
[4] => Array ( «name» = «350» ),
[5] => Array ( «name» = «725» ),
[6] => Array ( «name» = «12000» ),
[7] => Array ( «name» = «15000 tests» ),
>
So I’ve made this hybrid code which combines the best of both worlds by merging content sorted either way according to the first caracter of the string:
Array (
[2] => Array ( «name» = «45» ),
[3] => Array ( «name» = «113» ),
[4] => Array ( «name» = «350» ),
[5] => Array ( «name» = «725» ),
[6] => Array ( «name» = «12000» ),
[7] => Array ( «name» = «15000 tests» ),
[1] => Array ( «name» = «hello» ),
[0] => Array ( «name» = «test 01» ),
>
A very simple way to sort an array of associative arrays by some value is to use usort.
I needed to sort an array of 20 data structures by their ‘distance’ value:
Array
(
[0] => Array
(
[blahblah] => blahblah
[distance] => 6
)
[1] => Array
(
you get the idea.
If you do not have PHP 5.4 installed yet and you cannot use SORT_NATURAL. This function sorts arrays natural multi-dimensional based on key value
this function can be used for arrays as
array ( name => array( key => value ) )
and
arrays as array( name => array( key => value), name => value) are not supported.
If this ‘trick’ gives a wrong order, you need a better key.
I was (as near everyone here 🙂 looking to sort 2-dimensional arrays by certain fields in the associative sub-arrays.
What I didn’t like about the documentation examples is that you need to loop through the input array to create sub arrays first, then use those in the function call.
«php a-t-the-r-a-t-e chir.ag» (http://www.php.net/manual/en/function.array-multisort.php#60401) wrote a quite cunning wrapper function, I rewrote it slightly, changing variable names and adding comments (for my sanity 🙂 mostly.
One snag I found: the input array is passed to array_multisort as last argument, but the changed array is not the one that is returned. Passing it by reference fixed that. This seems to be caused by the whole thing sitting inside the call_user_func_array, as shown below.
Often, one may have a group of arrays which have parallel data that need to be kept associated with each other (e.g., the various attribute values of a group of elements might be stored in their own arrays). Using array_multisort as is, by specifying additional fields, it is possible, as in the documentation example cited below, that this association will be lost.
In order to sort by one field only (yet still have the other array(s) being correspondingly sorted), one can use array_keys (which makes an array out of the keys) to ensure that no further sub-sorting is performed. This works because array_keys is making an array for which no duplicates can exist (since keys will be unique), and thus, the subsequent fields will have no relevance as far as subsorting.
For database like sorting, here is my 2 cents:
/**
* The RowsSortHelperTool class.
*/
class RowsSortHelperTool
<
?>
Will display something like this:
array(7) <
[0] => array(3) <
[«volume»] => int(98)
[«edition»] => int(2)
[«mine»] => int(5)
>
[1] => array(3) <
[«volume»] => int(86)
[«edition»] => int(1)
[«mine»] => int(5)
>
[2] => array(3) <
[«volume»] => int(86)
[«edition»] => int(6)
[«mine»] => int(5)
>
[3] => array(3) <
[«volume»] => int(86)
[«edition»] => int(6)
[«mine»] => int(4)
>
[4] => array(3) <
[«volume»] => int(85)
[«edition»] => int(6)
[«mine»] => int(5)
>
[5] => array(3) <
[«volume»] => int(67)
[«edition»] => int(2)
[«mine»] => int(5)
>
[6] => array(3) <
[«volume»] => int(67)
[«edition»] => int(7)
[«mine»] => int(5)
>
>
Сортировка массивов в php: ksort, asort и прочие sort’ы
Поговорим о сортировке массивов.
Более подробную информацию и примеры вы всегда можете найти в документации по функциям сортировки.
Допустим у нас есть массив
Он неправильно отсортирован, как видите ключи (1,2,3) и значения (виноград, арбуз, банан) идут не по порядку. Давайте это исправим:
Сортировка массива по ключу
Сортировка массива по значению
Свои способы сортировки
Если предложенные способы сортировки вам не подходят, то можно создать свой способ сортировки ключей и значений массивов. Для этого есть 3 функции uasort, uksort и usort. С их помощью мы можем задать свою callback функцию, которая будет сравнивать элементы между собой и определять какой из них «больше» и какой «меньше».
Давайте рассмотрим как они работают напримере функции uasort, которая сравнивает значения с сохранением ключей.
Применить нашу новую функцию можно так:
Сохранение ключей означает, что каждый ключ как бы привязан к своему значению.
Если сортировка не дает ожидаемый результат, то изучите флаги сортировки. По умолчанию используется обычный тип сортировки SORT_REGULAR
Флаги типа сортировки:
Флаг сортировки передается в функцию сортировки, например так:
Сортировка многомерных массивов
Создадим функцию, которая нам поможет в сортировке массивов
Пример работы этой функции array_orderby() :
Если вам нужно что-то совсем уж специфическое при сортировки многомерных массивов
Можете создать и другие callback функции сортировки самостоятельно.
Массивы на «стероидах»
Часто работаете с массивами? Тогда вам понравится это расширение для работы с коллекциями.
Рассмотрим несколько примеров.
Простая сортировка чисел:
Сортировка по одной «колонке» ассоциативного массива:
Сортировка по нескольким аттрибутам одновременно:
Вы также можете использовать свои функции сортировки при работе с коллекциями:
Коллекции позволяют работать с массивами как в Laravel и функции этого замечательного инструмента далеко не ограничиваются сортировкой.
Изучите документацию и вы влюбитесь в коллекции.
IntSystem.org
Случаи из опыта разработки различных WEB проектов. Интересные факты, статьи, впечатления. Программирование и все о нем в сфере WEB.
Сортировка многомерных массивов по ключу на PHP
Практически перед каждым PHP-программистом становится задача отсортировать многомерный массив. К примеру вот такой вот:
По, допустим, ключу year, как же сделать это грамотно?
Как просили меня в комментах — забегу немного вперед. В PHP есть встроенная функция array_multisort — она позволяет сортировать многомерные массивы. Но если вам интересно давайте рассмотрим все возможные методы сортировки многомерных массивов и их плюсы и минусы в сравнении с array_multisort.
Классическое решение
Естественно первое про что вы подумали, это сортировка многомерного массива с помощью uasort, да? Набросаем вот такой вот код:
Запускаем, и засекаем время выполнения… Итого: 13.15 сек. Долговато и не впечатляет.
Ищем пути решения проблемы, находим на php.net, другой вариант функции сравнения, который, как там написано, должен работать быстрее:
Итого: 23.11 сек. Хреновая оптимизация…
Ладно, хорошо, со временем выполнения мы определились. Давайте попробуем определится с «расширяемостью кода». Допустим нам поставили задачу отсортировать сначала по ключу year а затем по ключу author. Для этого нам приходится переписывать всю «дополнительную функцию», в итоге получаем что то похожее на это:
Громоздко. Сложно изменять. Вообщем отстой, на мой взгляд.
Итак, подведем итоги. Минусы:
Пробуем костыли
Попробуем написать свою функцию для сортировки массивов с блекджеком и шлюхами. Напомню, наша задача сортировать многомерный массив по ключу:
Засекаем. Получаем: 7.90 сек. Ну уже не плохо впринципе.
Да вот только заставить этот костыль сортировать по двум ключам уже не получится, к сожалению. Подведем итоги. Минусы:
Функция array_multisort
Оказывается разработчики PHP уже давным давно все придумали до нас. Оказывается есть функция array_multisort. Как работает эта функция:
array_multisort( array &$arr [, array &$arr [, array &$arr. ]] )
Грубо говоря каждый массив будет отсортирован в соответствии с предыдущим массивом. Вообщем пример:
А это как раз то что нам надо! Возвращаемся к тестам на скорость:
Засекаем. Получаем: 3.87 сек. Это рекорд!
Ну то что это самый быстрый вариант мы определили. Это хорошо. А как насчет расширяемости? Как к примеру заставить сортировать массив по двум ключам? Оказывается с этой функцией очень просто! Достаточно добавить еще один «определяющий массив», вот так:
На выходе получим вот такой массив:
Как видите функция справилась со своей задачей. Наш массив отсортирован сначала по year, затем по author. А с помощью различных флагов типа SORT_DESC, SORT_ASC и тд можно добится любой сортировки (про них подробнее смотрите в мане), так что это на мой взгляд самый лучший вариант для использования в своих скриптах.
Заключение
Вообщем используйте array_multisort для сортировки многомерных массивов. И будет вам счастье.
Спасибо за внимание =)
Сортировка многомерных массивов по ключу на PHP
Смотрите также
Расширение класса PDO. Добавляем модулю PDO новую функциональность.
Выкладываю на ваш суд свой класс-надстройку над стандартным PDO. Писался и совершенствовался он с каждым проектом, и содержит все мои.
Множественные формы слов для 120 языков мира. Класс реализующий выбор и подстановку правильной формы слова, если это слово указывается вместе с числом.
Все наверное замечали как на многих сайтах встречаются нелепые предложения в которых указывается число неких вещей. А нелепые потому что.
Тестирование различных способов записи данных в таблицу. Сравнение конструкции insert on duplicate key с обычным подходом в три запроса. Производительность индексов MySQL.
Очень часто любому разработчику приходится сталкиваться с такой ситуацией: Проверить существует ли определенная запись в таблице. Если такой записи нет.
Как работать с ipv6 в php. Хранение IPv6 в MySQL. Преобразование, битовые операции с адресами ipv6 в php. Функции INET6_NTOA и INET6_ATON в MySQL
Вольный перевод: https://www.mikemackintosh.com/5-tips-for-working-with-ipv6-in-php/ Работать с IPv4 в php было очень просто, для этого существовало две функции ip2long и long2ip. Эти.
Блин, а я целый класс писал для таких сортировок… А оно уже оказывается есть встроеное(
Последний тест на скорость не корректный. В нем ключевой массив создается только один раз. А тестируется на время с уже созданным массивом.
Почему же неккоректный? Тестируется же имено скорость сортировки. Как и в остальных, предыдущих тестах.
Так то сделать можно, и да, будет быстрее и короче. Только первоочередная цель кода приведенного в моей статье, не быть быстрым и коротким, а быть наглядным.
То есть если нужна наглядность, то можно применять некорректные примеры сравнений? 🙂
Самая интересная часть статьи — рассказ про array_multisort() проходит в духе: «ух ты, смотри как клево!», но по сути тема не раскрывается. К примеру, я так и не понял что такое определяющий массив. Да, и к тому же, если задачей стояла наглядность, то почему в результирующем примере приводится решение с каким-то левым массивом, а не с тем, который был в самом начале. Уж он то куда нагляднее и раскрывает суть.
В общем, уныло как-то. Но за наводку на array_multisort() спасибо 🙂
Гм…) Может я где-то неправильно изложил суть материала, но пример по сортировке исходного массива был приведен:
Возвращаемся к тестам на скорость:
Засекаем. Получаем: 3.87 сек. Это рекорд!
А тот пример, который вы называете некорректным — вполне корректен. В нем демонстрируется сортировка по двум ключам.
Насчет «уныло» — я конечно уважаю критику, но зря вы так жестко) моей целью дествительно было подсказать о существовании данной функции, и в кратце объяснить как ей пользоваться. Но возможно вы правы, стоило об этом написать подробнее
Абсолютно солидарен.
Автор видимо полагает, что это и так всем известно. Я, если честно, кроме как нужно использовать функцию array_multisort(), ни хрена не понял. А как пользоваться, в каким случаях куда и что совать…
Автор силен в языке, но как преподаватель — хреновый.
Ставил я задачу перед собой подсказать о существовании данной функции. А по поводу того как ее использовать, достаточно внятно описано в официальном мануале, не захотел дублировать его.
Но добавил в TODO написать подробнее об использовании.
«Оказывается есть функция array_multisort.» — я бы сократил всю статью до этой фразы. Мне кажется, она бы стала только лучше.
Добавил абзац в самое начало статьи.
Благодарствую за нужный материал. Как раз столкнулся с необходимостью сортировки массива по 2м ключам. Благодаря Вашей подсказки сделал под себя сортировку)
Доброго времени суток, все вроде отлично. Кроме одного, совсем мелкое замечание, но «Вообщем» слова не существует есть «Вообще» и «В общем»(2 слова). Прошу прощения, не хотел найти за что бы придраться, просто хотел бы помочь в искоренении мелких ошибочек. И к этому добавлю обращение в ед. множестве к человеку пишется с большой буквы. Во множественном числе можно написать с маленькой. В остальном, уважаю Ваш труд.
Насчет дебатов, с Александром.
Ув. Александр, преподаватели в университете, школах, пр. учебных заведениях, на тренингах и прочих познавательных семинарах. Человек, потратил время расписать полезную функцию PHP в читаемой форме, будем же ему просто благодарны, ведь, он же ни где не писал о своей цели преподнести доступно ЯП для всех читателей его трудов.
Спасибо за ваш комментарий. Да, если честно, я знаю про правильное написание этих слов. Постоянно бью себя по рукам и заставляю себя обращать свое внимание на это. Но, к сожалению, — не выходит, иногда ошибки проскакивают. Буду исправляться)
И еще, спасибо за поддержку. Мне очень не нравится та потребительская позиция, которую выбирают некоторые мои читатели, и я рад что хоть кто-то встал на мою защиту)
Было бы за что, просто, действительно, не справедливо. Сам все собираюсь завести «напоминалку», порой делаешь что-то интересное, спустя время забываешь, а потом как начнешь копаться по проектах. Но такие моменты заставляют задуматься, а стоит ли в открытом доступе выставлять свои заметки.
Кстати, спасибо и Вам так же, пару раз сталкивался, но решалось на уровне оформления бд для такой цели и запросом. А в данном случае, идеальное решение без лишних усилий)
Но такие моменты заставляют задуматься, а стоит ли в открытом доступе выставлять свои заметки.
Я думаю, в любом случае, стОит. Надо нести добро людям)
Здравствуйте!
Аким, если берете на себя бремя исправлений, желателен личный пример.
1. «Кроме одного, совсем мелкое замечание, но «Вообщем» слова не существует есть «Вообще» и «В общем»(2 слова). »
Уместно двоеточие (уточняющее слово) после «Кроме одного».
Запятая перед «есть» (сложносочиненное).
2. «И к этому добавлю обращение в ед. множестве…»
Уместно двоеточие после «добавлю» (между частями бессоюзного сложного предложения)
3. «В остальном, уважаю Ваш труд.»
Запятая не нужна (наречное выражение, к тематике вводных слов не относится и не обособляется)
4. «Насчет дебатов, с Александром.»
Видимо, «с Александром» в данном случае играет роль уточнения, можно списать на «авторский текст». Но лучше без запятой.
5. «Человек, потратил время расписать…»
Запятая не нужна. Даже в случае «авторского текста» не нужна :).
6. «…будем же ему просто благодарны, ведь, он же ни где не писал о своей…»
Запятая перед «ведь» лишняя.
«ни где» пишется вместе.
По смыслу комментария с Акимом полностью согласен. Спасибо за развернутое пояснение с примерами. Сэкономили время, а это деньги! Благодарю, Дмитрий!
«Собаки лают — караван идет». Негативные отзывы не стоят Вашего внимания.
Ух, Александр, как вы разошлись) Вообще, я отчасти благодарен Акиму, за то что он обратил внимание на эту ошибку, так как я заметил что много где ее допускаю.
И спасибо за поддержку 🙂
Спасибо за материал, лучший что я нашел и все понял хотя и являюсь лишь прикладным разработчиком, и не знаю PHP.
Хотя отчасти согласен с критикой, в том плане что когда знаешь, все сразу предельно понятно, а если не знаешь — то желательно что бы все было очень(!) подробно разжевано. Видимо некоторые посетители сложнее соображают и им остается непонятным данный пример.
Тестировать алгоритмы сортировки на массиве из 8 элементов — смешно)
Тут самая тупая сортировка вставками будет работать быстрее любого хитрого алгоритма.
И все же по поводу расширяемости поспорю, «оперделяющим массивом» определить нужный компоратор можно далеко не всегда, а только когда все элементы сравниваются с «чем-то», а не между собой.
P.S. Как расширить самый расширяемый метод например, если нам нужно N полей для сравнения?
Ну главное, что тест даже и из 8 элементов вполне показательный.