Как работает 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:

  1. Кот приходит первым
  2. Две собаки имеют галстук, поэтому Фидо идет первым, потому что Фидо <Плутон
Другие вопросы по тегам