我有一些问题需要理解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是如何工作的,这样我就能理解它是如何工作的。
答案 0 :(得分:10)
嗯,您正在以与Excel等程序类似的方式对数组进行排序。每个数组对应一列。
首先,所有数组都按给定的第一个数组排序。如果存在相同的值,则受影响的值将按给定的第二个数组排序。如果值再次相等,则使用第三个数组等
或者换句话说:数组是使用所有数组排序的,但是从右边开始(如果你假设它真的按所有列排序一次)。
对于您的特定示例(第二个):
首先,您希望按升序排序,因此Cat
将是第一个。因此,最后一个数组元素将移动到两个数组中的第一个位置。其他两个元素Dog
是相等的。这会导致函数查看下一个数组。它被告知要按降序对此数组进行排序,因此Pluto
首先出现。在这种情况下,这会导致元素根本不移动(因为它们的顺序已经正确)。
答案 1 :(得分:2)
第二个数组中的条目对应于第一个数组中相同的条目。
答案 2 :(得分:1)
如果您查看documentation和第一个示例,您会发现这是预期的行为。
有两个参数,两个数组:第一个数组已排序;如果第一列中的对应值绑定,则第二个数组将重新排列和排序其相应的值。至于你的例子,当你正在做一个SQL ORDER BY Animal, Name
时想到它: