Как работает php array_multisort?
У меня есть проблемы с пониманием array_multisort
Посмотрите, как он сортирует, когда два значения одинаковы:
$a1=array("Dog","Dog","Cat");
$a2=array("Pluto","Fido","Missy");
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
Вывод кода выше будет:
Array ( [0] => Cat [1] => Dog [2] => Dog )
Array ( [0] => Missy [1] => Fido [2] => Pluto )
дайте мне знать, почему Мисси стоит на первом месте, если вы делаете это по возрастанию, это должен быть массив ( [0] => Fido, [1] => Missy, [2] => Плутон) для нисходящего наоборот
также увидеть это
С параметрами сортировки:
$a1=array("Dog","Dog","Cat");
$a2=array("Pluto","Fido","Missy");
array_multisort($a1,SORT_ASC,$a2,SORT_DESC);
print_r($a1);
print_r($a2);
Вывод кода выше будет:
Array ( [0] => Cat [1] => Dog [2] => Dog )
Array ( [0] => Missy [1] => Pluto [2] => Fido )
но Array ( [0] => Missy [1] => Pluto [2] => Fido) не в SORT_DESC - это некий тип путаницы.
Может кто-нибудь объяснить мне, как работает array_multisort, чтобы я мог понять, как он работает.
3 ответа
Ну, вы сортируете массивы аналогично программам, таким как Excel. Каждый массив соответствует столбцу.
Во-первых, все массивы отсортированы по первому указанному массиву. Если есть идентичные значения, затронутые сортируются по второму указанному массиву. Если снова есть равные значения, используется третий массив и т. Д.
Или другими словами: массивы сортируются с использованием всех массивов, но начинаются справа (если вы предполагаете, что они действительно сортируются по всем столбцам один раз).
Для вашего конкретного примера (второй):
Сначала вы хотите отсортировать в порядке возрастания, так Cat
будет первым. Поэтому последний элемент массива будет перемещен на первую позицию в обоих массивах. Два других элемента, Dog
равны. Это заставляет функцию смотреть на следующий массив. Сказано отсортировать этот массив в порядке убывания, поэтому Pluto
приходит первым В этом случае это приводит к тому, что элементы вообще не перемещаются (так как их порядок уже правильный).
Записи во втором массиве соответствуют идентичным записям в первом массиве.
Если вы посмотрите на документацию и первый пример, вы заметите, что это ожидаемое поведение.
С двумя аргументами, оба массива: первый массив отсортирован; второй массив будет иметь свои соответствующие значения переупорядочены и отсортированы, если соответствующие значения в первом столбце связаны. Что касается вашего примера, подумайте об этом, как вы делаете SQL ORDER BY Animal, Name
:
- Кот приходит первым
- Две собаки имеют галстук, поэтому Фидо идет первым, потому что Фидо <Плутон