[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个元素是第2个元素。
(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 中元素排序前后的变化。

此时,

(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个元素。
(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
加载中...
0票,平均分:0.00/10
871
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者