[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 个元素是排序后的
第 5 个元素排序后第 1
个元素 (c) 排序后第 2 个元素为第 3 个元素
(d) 排序后第 3 个元素为第 0 个元素
该规则适用。
惊人的
补充
$arr5 = [0, 假]; $arr6 = [100, 200];
有一个数组叫
array_multisort($arr5, $arr6);
因此,
即使$arr5的内容变成[false, 0],
$arr6的内容也不会变成[200, 100]。
因为在松散比较中 0 和 false 是相等的。
有关此操作的,请参阅手册
结束