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

PHP

前言

array_multisort() 是众多数组排序函数之一,但
手册来帮助理解。
所以,这篇文章就是为那些不理解 array_multisort() 的人准备的。

 

一个简单的例子

$arr1 = [10, 100, 1, 0]; $arr2 = [3, 2, 1, 0];

让我们尝试使用 array_multisort() 对这两个数组进行排序。

array_multisort($arr1, $arr2);

首先,对 $arr1 进行排序。
由于排序方法和排序顺序未作为参数指定,因此采用的是宽松的比较和升序排序。
下图展示了对 $arr1 进行排序前后元素的移动情况。

此时,

(A)排序后,第0个元素是第二个元素。
(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 进行排序前后元素的移动情况。

此时,

(a)排序后,第0个和第4个元素要么是第4个元素,要么是第5个元素。
(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-1) 第0个元素排序后变为第5个元素。
(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
加载中...
0票,平均分:0.00/10
844
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者