[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个元素是第3个元素。
(C)排序后,第2个元素是第1个元素。
(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个元素。
(b-2) 第5个元素排序后变为第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
