搜索
首页后端开发php教程PHP array_multisort()函数的使用札记

函数  bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $...]]] ) 
参数说明: 函数对多个数组或多维数组进行排序 
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志 
SORT_ASC - 默认,按升序排列 
SORT_DESC - 按降序排列 
随后可以指定排序的类型 
SORT_REGULAR - 默认。将每一项按常规顺序排列。 
SORT_NUMERIC - 将每一项按数字顺序排列。 
SORT_STRING - 将每一项按字母顺序排列。 
实例代码 

$arr1 = array('10', 11, 100, 100, 'a'); 
$arr2 = array(1, 2, 3, '2', 5); 
array_multisort($arr1, $arr2);

结果为: 
$arr1 
Array ( [0] => 10 [1] => a [2] => 11 [3] => 100 [4] => 100 ) 
# '10'在与11, 100, 100比较时转换为整数10,小于其他三个数 
# '10'在于'a'比较时作为字符串,其第一个字符'1'ascii码值为49小于‘a'(ascii值为97),所以‘10'为最小元素 
# 'a'在于其他三个数字比较时,转换为整数0,小于其他三个数 
$arr2 
Array ( [0] => 1 [1] => 5 [2] => 2 [3] => 2 [4] => 3 ) 
# $arr2元素1与$arr1元素'10'位置对应,所以排在[0]位置 
# $arr1[2] => 100, $arr1[3] => 100分别对应$arr2元素3, '2'。3大于'2',所以与2对应的$arr1[2] => 100排序后的下标为 
3,与3对应的$arr1[3] => 100排序的下标为4 
总结 
1.参与排序的数组元素数保持一致 
2.排序数组元素位置对应如, ‘10' => 1 , 11 => 2 
3.后边的数组在前边数组的顺序的基础上进行排序 
4.前边的数组如遇相等的元素则比较后边的数组

array_multisort — 对多个数组或多维数组进行排序 

说明 
bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] ) 
成功时返回 TRUE, 或者在失败时返回 FALSE. 

array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。 

关联(string)键名保持不变,但数字键名会被重新索引。 

输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。 

本函数的参数结构有些不同寻常,但是非常灵活。第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。 

排序顺序标志: 

SORT_ASC - 按照上升顺序排序 
SORT_DESC - 按照下降顺序排序 

排序类型标志: 

SORT_REGULAR - 将项目按照通常方法比较 
SORT_NUMERIC - 将项目按照数值比较 
SORT_STRING - 将项目按照字符串比较 

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。 

#1 对多个数组排序 

<?php 
$ar1 = array("10", 100, 100, "a"); 
$ar2 = array(1, 3, "2", 1); 
array_multisort($ar1, $ar2); 
var_dump($ar1); 
var_dump($ar2); 
?>

本例中经过排序后,第一个数组将包含 "10","a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致。 

array(4) { 
[0]=> string(2) "10" 
[1]=> string(1) "a" 
[2]=> int(100) 
[3]=> int(100) 
} 
array(4) { 
[0]=> int(1) 
[1]=> int(1) 
[2]=> string(1) "2" 
[3]=> int(3) 
}

#2 对多维数组排序 

<?php 
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); 
array_multisort ($ar[0], SORT_ASC, SORT_STRING, 
$ar[1], SORT_NUMERIC, SORT_DESC); 
?>

本例中经过排序后,第一个数组将包含 10,100,100,"a"(作为字符串上升排序),第二个数组将包含 1,3,"2",1(作为数值下降排序)。 

#3 Sorting multi-dimensional array 

<?php 
$ar = array( 
array("10", 11, 100, 100, "a"), 
array( 1, 2, "2", 3, 1) 
); 
array_multisort($ar[0], SORT_ASC, SORT_STRING, 
$ar[1], SORT_NUMERIC, SORT_DESC); 
var_dump($ar); 
?>

本例中在排序后,第一个数组将变成 "10",100,100,11,"a"(被当作字符串以升序排列)。第二个数组将包含 1, 3, "2", 2, 1(被当作数字以降序排列)。 

array(2) { 
[0]=> array(5) { 
[0]=> string(2) "10" 
[1]=> int(100) 
[2]=> int(100) 
[3]=> int(11) 
[4]=> string(1) "a" 
} 
[1]=> array(5) { 
[0]=> int(1) 
[1]=> int(3) 
[2]=> string(1) "2" 
[3]=> int(2) 
[4]=> int(1) 
} 
}

#4 对数据库结果进行排序 
本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。 

例子中的数据如下: 

volume | edition 
-------+-------- 
67 | 2 
86 | 1 
85 | 6 
98 | 2 
86 | 6 
67 | 7 

数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。 

6bfac01835ebc2082899a02991ee720f 67, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 1); 
$data[] = array('volume' => 85, 'edition' => 6); 
$data[] = array('volume' => 98, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 6); 
$data[] = array('volume' => 67, 'edition' => 7); 
?> 
本例中将把 volume 降序排列,把 edition 升序排列。 

现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。 

1e59e18f09b8be1c5b40ba337a1ffdae $row) { 
$volume[$key] = $row['volume']; 
$edition[$key] = $row['edition']; 


// 将数据根据 volume 降序排列,根据 edition 升序排列 
// 把 $data 作为最后一个参数,以通用键排序 
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
?> 
数据集合现在排好序了,结果如下: 

volume | edition 
-------+-------- 
98 | 2 
86 | 1 
86 | 6 
85 | 6 
67 | 2 
67 | 7 


Example #5 不区分大小写字母排序 

SORT_STRING 和 SORT_REGULAR 都是区分大小写字母的,大写字母会排在小写字母之前。 

要进行不区分大小写的排序,就要按照原数组的小写字母拷贝来排序。 

<?php 
$array = array(&#39;Alpha&#39;, &#39;atomic&#39;, &#39;Beta&#39;, &#39;bank&#39;); 
$array_lowercase = array_map(&#39;strtolower&#39;, $array); 

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); 

print_r($array); 
?>

以上例程会输出: 

Array 

[0] => Alpha 
[1] => atomic 
[2] => bank 
[3] => Beta 


【译者注】本函数相当有用,为有助于理解,请再看下面这个例子: 


Example #6 名次排列 

<?php 
$grade = array("score" => array(70, 95, 70.0, 60, "70"), 
"name" => array("Zhang San", "Li Si", "Wang Wu", 
"Zhao Liu", "Liu Qi")); 
array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC, 
// 将分数作为数值,由高到低排序 
$grade["name"], SORT_STRING, SORT_ASC); 
// 将名字作为字符串,由小到大排序 
var_dump($grade); 
?>

以上例程会输出: 

array(2) { 
["score"]=> 
array(5) { 
[0]=> 
int(95) 
[1]=> 
string(2) "70" 
[2]=> 
float(70) 
[3]=> 
int(70) 
[4]=> 
int(60) 

["name"]=> 
array(5) { 
[0]=> 
string(5) "Li Si" 
[1]=> 
string(6) "Liu Qi" 
[2]=> 
string(7) "Wang Wu" 
[3]=> 
string(9) "Zhang San" 
[4]=> 
string(8) "Zhao Liu" 


本例中对包含成绩的数组 $grade 按照分数(score)由高到低进行排序,分数相同的人则按照名字(name)由小到大排序。排序后李四 95 分为第一名,赵六 60 分为第五名没有异议。张三、王五和刘七都是 70 分,他们的名次则由其姓名的字母顺序排列,Liu 在前,Wang 在后而 Zhang 在最后。为了区别,三个 70 分分别用了整数,浮点数和字符串来表示,可以在程序输出中清楚地看到它们排序的结果。

更多PHP array_multisort()函数的使用札记相关文章请关注PHP中文网!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用数据库存储会话的优点是什么?使用数据库存储会话的优点是什么?Apr 24, 2025 am 12:16 AM

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

您如何在PHP中实现自定义会话处理?您如何在PHP中实现自定义会话处理?Apr 24, 2025 am 12:16 AM

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

什么是会话ID?什么是会话ID?Apr 24, 2025 am 12:13 AM

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

您如何在无状态环境(例如API)中处理会议?您如何在无状态环境(例如API)中处理会议?Apr 24, 2025 am 12:12 AM

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

您如何防止与会议有关的跨站点脚本(XSS)攻击?您如何防止与会议有关的跨站点脚本(XSS)攻击?Apr 23, 2025 am 12:16 AM

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

您如何优化PHP会话性能?您如何优化PHP会话性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

什么是session.gc_maxlifetime配置设置?什么是session.gc_maxlifetime配置设置?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

您如何在PHP中配置会话名?您如何在PHP中配置会话名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)