как работает php array_multisort? - PullRequest
       16

как работает php array_multisort?

5 голосов
/ 01 февраля 2012

У меня возникли проблемы с пониманием 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 )

дайте мне знать, почему Мисси стоит на первом месте, если вы делаете это по возрастанию, это должно быть Array ([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] => Плутон [2] => Фидо) не в SORT_DESC - это некий тип путаницы.

Может кто-нибудь объяснить мне, как работает array_multisort, так что я могу понять, как он работает.

Ответы [ 3 ]

10 голосов
/ 01 февраля 2012

Ну, вы сортируете массивы аналогично программам, таким как Excel. Каждый массив соответствует столбцу.

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

Или другими словами: массивы сортируются с использованием всех массивов, но начинаются справа (если вы предполагаете, что они действительно сортируются по всем столбцам один раз).

Для вашего конкретного примера (второй):

Сначала вы хотите отсортировать по возрастанию, поэтому Cat будет первым. Поэтому последний элемент массива будет перемещен на первую позицию в обоих массивах. Два других элемента Dog равны. Это заставляет функцию смотреть на следующий массив. Сказано отсортировать этот массив в порядке убывания, поэтому на первом месте стоит Pluto. В этом случае это приводит к тому, что элементы вообще не перемещаются (так как их порядок уже правильный).

2 голосов
/ 01 февраля 2012

Записи во втором массиве соответствуют идентичным записям в первом массиве.

1 голос
/ 01 февраля 2012

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

С двумя аргументами, оба массива: первый массив отсортирован; второй массив будет иметь свои соответствующие значения переупорядочены и отсортированы, если соответствующие значения в первом столбце связаны. Что касается вашего примера, то подумайте, что вы делаете SQL ORDER BY Animal, Name:

  1. Кошка на первом месте
  2. У двух псов галстук, поэтому Фидо идет первым, потому что Фидо <Плутон </li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...