[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

[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 个元素是排序后的
第 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 是相等的。
有关此操作的,请参阅手册

 

结束

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
709
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者