php array_multisort如何工作?

时间:2012-02-01 09:45:07

标签: php arrays sorting

我有一些问题需要理解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 )

让我知道为什么Missy是第一位的,如果你通过提升它必须是  数组([0] => Fido,[1] => Missy,[2] => Pluto) 反之亦然

也看到了这个

使用排序参数:

$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 )

但阵列([0] => Missy [1] => Pluto [2] => Fido)不在SORT_DESC是某种混合类型。

有人可以解释一下array_multisort是如何工作的,这样我就能理解它是如何工作的。

3 个答案:

答案 0 :(得分:10)

嗯,您正在以与Excel等程序类似的方式对数组进行排序。每个数组对应一列。

首先,所有数组都按给定的第一个数组排序。如果存在相同的值,则受影响的值将按给定的第二个数组排序。如果值再次相等,则使用第三个数组等

或者换句话说:数组是使用所有数组排序的,但是从右边开始(如果你假设它真的按所有列排序一次)。

对于您的特定示例(第二个):

首先,您希望按升序排序,因此Cat将是第一个。因此,最后一个数组元素将移动到两个数组中的第一个位置。其他两个元素Dog是相等的。这会导致函数查看下一个数组。它被告知要按降序对此数组进行排序,因此Pluto首先出现。在这种情况下,这会导致元素根本不移动(因为它们的顺序已经正确)。

答案 1 :(得分:2)

第二个数组中的条目对应于第一个数组中相同的条目。

答案 2 :(得分:1)

如果您查看documentation和第一个示例,您会发现这是预期的行为。

有两个参数,两个数组:第一个数组已排序;如果第一列中的对应值绑定,则第二个数组将重新排列和排序其相应的值。至于你的例子,当你正在做一个SQL ORDER BY Animal, Name时想到它:

  1. Cat首先
  2. 两只狗有一条领带,所以Fido首先是因为Fido<冥王星