PHP数组array_multisort排序详解
今天特意再看了下官网的介绍,对它的多个数组的排序还是每台理解,找了些资料深入理解了下,在此总结下。
PHP中array_multisort函数对多个数组或多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。
第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。
排序顺序标志:
■SORT_ASC - 按照上升顺序排序
■SORT_DESC - 按照下降顺序排序
排序类型标志:
■SORT_REGULAR - 将项目按照通常方法比较
■SORT_NUMERIC - 将项目按照数值比较
■SORT_STRING - 将项目按照字符串比较
每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。
参数数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。注意:作为参数的数组元素个数应保持一致,否则会报错。
先看一个对多个数组进行排序的例子。
<?php
$array1 = array('one'=>'10','two'=>'20','three'=>'20','four'=>10);
$array2 = array('one'=>'10','two'=>'30','three'=>'20','four'=>'1');
$array3 = array('one'=>'C','two'=>'A','three'=>'B','four'=>'F');
array_multisort($array1,$array2,$array3);
print_r($array1);//Array ( [four] => 10 [one] => 10 [three] => 20 [two] => 20 )
print_r($array2);//Array ( [four] => 1 [one] => 10 [three] => 20 [two] => 30 )
print_r($array3);//Array ( [four] => F [one] => C [three] => B [two] => A )
在上面的例子中,首先对第一个参数数组进行排序(默认所有数组升序排序),我们可以看出第一个数组中存在相同的值(键名‘one’和‘four’的键值相同,键名‘two’和‘three’的键值相同),所以在排序第一个数组的相同值时就按照下一个输入数组中相应值的大小来排序(第二个数组‘four’的值小于‘one’的值,因此four的值排在one的前面),依此类推。
在看一个,改变排序顺序的例子。
$array1 = array('one'=>'10','two'=>'20','three'=>'20','four'=>10);
$array2 = array('one'=>'10','two'=>'30','three'=>'20','four'=>'1');
$array3 = array('one'=>'C','two'=>'A','three'=>'B','four'=>'F');
array_multisort($array1,SORT_DESC,$array2,SORT_ASC,$array3);
print_r($array1);//Array ( [three] => 20 [two] => 20 [four] => 10 [one] => 10 )
print_r($array2);//Array ( [three] => 20 [two] => 30 [four] => 1 [one] => 10 )
print_r($array3);//Array ( [three] => B [two] => A [four] => F [one] => C )
在这个例子中,第一个数组降序排序,碰到相同的值,按照第二个数组升序值进行排序。
注意:如果要是排序数组都是关联数组,则保留原有key名,若存在索引数组,则会按顺序重新建立索引。
$array1 = array('one'=>'10',2=>'20',3=>'20',4=>10);
$array2 = array('one'=>'10','2'=>'30','3'=>'20','four'=>'1');
$array3 = array('one'=>'C','2'=>'A','3'=>'B','four'=>'F');
array_multisort($array1,$array2,$array3);
print_r($array1); //Array ( [0] => 10 [one] => 10 [1] => 20 [2] => 20 )
print_r($array2); //Array ( [four] => 1 [one] => 10 [0] => 20 [1] => 30 )
print_r($array3); //Array ( [four] => F [one] => C [0] => B [1] => A )
多维数组排序。
我们通常有一些多维数组需要排序:
$guys = array(
array('name'=>'jake', 'score'=>80, 'grade' =>'A'),
array('name'=>'jina', 'score'=>70, 'grade'=>'A'),
array('name'=>'john', 'score'=>70, 'grade' =>'A'),
array('name'=>'ben', 'score'=>20, 'grade'=>'B')
);
//例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。
//这时我们就需要根据$guys的顺序多弄两个数组出来:
$scores = array(80,70,70,20);
$names = array('jake','jina','john','ben');
//然后
array_multisort($scores, SORT_DESC, $names, $guys); foreach($guys as $v){
print_r($v);
echo "<br/>";
}
/*
Array ( [name] => jake [score] => 80 [grade] => A )
Array ( [name] => jina [score] => 70 [grade] => A )
Array ( [name] => john [score] => 70 [grade] => A )
Array ( [name] => ben [score] => 20 [grade] => B )
*/
再来个一次对多个数组进行排序:
$num1 = array(3, 5, 4, 3);
$num2 = array(27, 50, 44, 78);
array_multisort($num1, SORT_ASC, $num2, SORT_DESC); print_r($num1);
print_r($num2);
//result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )
对多维数组(以二位数组为例)进行排序:
$arr = array(
'0' => array(
'num1' => 3,
'num2' => 27
), '1' => array(
'num1' => 5,
'num2' => 50
), '2' => array(
'num1' => 4,
'num2' => 44
), '3' => array(
'num1' => 3,
'num2' => 78
)
); foreach ( $arr as $key => $row ){
$num1[$key] = $row ['num1'];
$num2[$key] = $row ['num2'];
} array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr); print_r($arr);
//result:Array([0]=>Array([num1]=>3 [num2]=>78) [1]=>Array([num1]=>3 [num2]=>27) [2]=>Array([num1]=>4 [num2]=>44) [3]=>Array([num1]=>5 [num2]=>50))
理解有限.......可能有描述不正之处
PHP数组array_multisort排序详解的更多相关文章
- js数组对象排序详解
一.js对象遍历输出的时候真的是按照顺序输出吗? 下边就来实践一下: var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',h ...
- 005-Scala数组操作实战详解
005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- sorted()排序详解
sorted()排序详解 http://wiki.python.org/moin/HowTo/Sorting?highlight=%28howto%29#The_Old_Way_Using_t ...
- PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)
一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...
- js数组的sort排序详解
<body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox" ...
- JavaScript中数组Array方法详解
ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...
- PHP数组排序函数array_multisort()函数详解
这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家. 原文链接:http://blog.163.com/lgh_2002/blog/static/44017526 ...
- PHP数组排序函数array_multisort()函数详解(二)
array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...
随机推荐
- Oracle数据库在plsql中文乱码,显示问号????
1.错误显示结果: 2.错误的原因: SqlPlus乱码与操作系统用户中的NLS_LANG这个环境变量有关系,如果这个与数据库字符集不一致的话就会产生乱码 3.解决方法1:(配置环境变量) 1.sel ...
- Live2D插件--漂浮的二次元小姐姐
这个插件找了很久,都没找到,今天偶然翻到一个小哥的博客发现了这个,果断偷走. 教程转自简书:https://www.jianshu.com/p/1cedcf183633 还有这些,你可能有用 修改位置 ...
- Python基础之模块+异常
一.模块相关概念 1.定义:包含一系列数据.函数.类的文件,通常以.py结尾. 2.作用:让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰.有利于多人合作开发. 3.模块导入方式(三种 ...
- unittest各个组件之间的关系
各个组件的含义: TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为. TestSuite:测试套件,是测试用例的集合. TestFixure:测试固件,测试准备 ...
- 逆天的 GRUB
参考资料 GRUB 的文档在这里:https://www.gnu.org/software/grub/manual/grub/ Linux 的启动过程和 GRUB 的地位 Linux 系统启动的过程是 ...
- 清除SqlServer日志
--在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式. USE [master]GO --GPSLocus是要清除日志的数据库名称ALTER DATABASE [DbN ...
- 微信小程序写tab切换
微信小程序之tab切换效果,如图: 最近在学习微信小程序并把之前的公司app搬到小程序上,挑一些实现效果记录一下(主要是官方文档里没说的,毕竟官方文档只是介绍功能) .wxml代码: <view ...
- Spring Cloud 微服务架构的五脏六腑,统统晒一晒!
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...
- [Swift]LeetCode67. 二进制求和 | Add Binary
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- [Swift]LeetCode746. 使用最小花费爬楼梯 | Min Cost Climbing Stairs
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay ...