[PHP] array_multisort() 函数图解指南

前言
array_multisort() 是众多数组排序函数之一,但
手册来帮助理解。
所以,这篇文章就是为那些不理解 array_multisort() 的人准备的。
一个简单的例子
$arr1 = [10, 100, 1, 0]; $arr2 = [3, 2, 1, 0];
让我们尝试使用 array_multisort() 对这两个数组进行排序。
array_multisort($arr1, $arr2);
首先,对 $arr1 进行排序。
由于排序方法和排序顺序未作为参数指定,因此采用的是宽松的比较和升序排序。
下图展示了对 $arr1 进行排序前后元素的移动情况。

此时,
(B)排序后,第1个元素是第三个元素。
(C)排序后,第2个元素是第一个元素。
(D)排序后,第3个元素是第0个元素。
对 $arr2 进行排序时,将创建并应用以下规则。
排序前后 $arr2 中元素的行为如下:

如果将另一个数组作为参数传递,则该数组的排序将受到 $arr2 排序结果的影响。
一个棘手的例子
$arr3 = [500, 100, 250, 0, 500, 100]; $arr4 = [5, 4, 3, 2, 1];
让我们尝试使用 array_multisort() 对这两个数组进行排序。
array_multisort($arr3, $arr4);
首先,对 $arr3 进行排序。
与之前的示例一样,排序方法和排序顺序未作为参数指定,因此排序采用宽松比较和升序排列。
下图展示了对 $arr3 进行排序前后元素的移动情况。

此时,
(b)排序后,第1个和第5个元素要么是第1个元素,要么
是第2个元素。(c)排序后,第2个元素是第3个元素。
(d)排序后,第3个元素是第0个元素。
这将创建一个规则,该规则在对 $arr4 进行排序时应用。
与前一个例子最大的区别在于,$arr3 包含两组相同的数值。100
和 100,以及 500 和 500 的大小相同(= 比较结果相等),因此
根据规则 (a) 和 (b),此时排序后的位置是未定义的。
那么 $arr4 的排序结果会是什么呢?它会是这样的。

规则 (c) 和 (d) 直接执行。
对于规则 (a),参数中指定的排序方法应用于对应的元素 (4,0)。
在本例中,未指定 $arr4 的排序方法,因此默认按升序排序。
类似地,对于规则 (b),对应的元素 (5,1) 也按升序排序。
对 $arr4 进行排序后,得到以下数组(如果作为参数传递):
(a-2) 第4个元素排序后变为第4个元素。
(b-1) 第1个和第2个元素排序后变为第2个元素。
(b-2) 第5个和第1个元素排序后变为第1个元素。
(c) 第2个元素排序后变为第3个元素。
(d) 第3个元素排序后变为第0个元素。
适用以下规则:
惊人的!
补充
$arr5 = [0, false]; $arr6 = [100, 200];
有一个名为
array_multisort($arr5, $arr6);
因此,
即使 $arr5 的内容变为 [false, 0],
$arr6 的内容也不会变为 [200, 100]。
这是因为在宽松比较中,0 和 false 被视为相等。
有关此行为的详细信息,请参阅手册
结束
0