PHP array_multisort()函数详解

这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家。

  原文链接:http://blog.163.com/lgh_2002/blog/static/4401752620115242345435/

array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列——有点拗口,真的,并且我要只是这样说你一定也不明白。先举个例子:

例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边的程序运行结果:

1234567
<?php $a =array(100,80,50,10,0);$b = array("c","f","q","e","z");array_multisort($a,$b);var_dump($a);var_dump($b);?>

运行结果:
array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) }
array(5) { [0]=> string(1) “z” [1]=> string(1) “e” [2]=> string(1) “q” [3]=> string(1) “f” [4]=> string(1) “c” }

很显然本来是数组b第五个元素的z被排到了第一位!

其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第二位……——其实这个多维数组排序算法的最基本体现!

不过需要注意的是:两个数组的元素个数必须相同,不然就会出现一个警告信息:
Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in ……

好了,希望上边的大家也能用上,咱们还是说主要的吧:array_multisort()对多维数组进行排序,这个功能将来做项目的时候是非常有用的!

首先我们看看对多维数组的每一元素[数组]进行排序的操作方法,很简单,但是有几个参数需要说明一下,如果您对sql有所了解一看估计就明白了:

12345678910
<?php//让我们来构造一个多维数组$a=array(100,2,4,7,7);$b=array(‘ab‘,‘ac‘,‘ad‘,‘ag‘,‘ap‘); $ab = array($a,$b);//开始排序array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[1],SORT_STRING,SORT_ASC);print_r($ab);?>

说明一下:首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC
声明顺序是逆序(从大到小),然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序)
最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同的数值则按照$ab[1]的顺序排列,输出结果如下:

Array (
[0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
[1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
)
是不是很像在数据库中用order by?其实真的差不多!

现在我们再看一个更加贴近实际应用的例子:

1234567891011121314
<?php $array[] = array("age"=>20,"name"=>"li");$array[] = array("age"=>21,"name"=>"ai");$array[] = array("age"=>20,"name"=>"ci");$array[] = array("age"=>22,"name"=>"di"); foreach ($array as $key=>$value){ $age[$key] = $value[‘age‘]; $name[$key] = $value[‘name‘];} array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array);print_r($array);?>

这个例子的$array[]数组,是按照数据库中读出的记录来构造的,我们现在对他们按照年龄从大到小的顺序排列,如果年龄相同就按照名字的顺序排序。这样的排序才是我们将来会经常用的到的,
因为array_multisort()需要的排序参数必须是一个列,所以我们用foreach把这个数组的年龄和姓名读出来,之后呢?
就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需要列,还没见过用行数据进行排序的呢!

输出结果如下——正如我们所想的:
Array (
[0] => Array ( [age] => 22 [name] => di )
[1] => Array ( [age] => 21 [name] => ai )
[2] => Array ( [age] => 20 [name] => ci )
[3] => Array ( [age] => 20 [name] => li )
)

看到了吧,其实也很简单,就是那几个需要大写的参数有点烦人而已!虽说也有点难以理解,但是理解了就好了,将来很有用的哦!

时间: 2024-10-29 03:37:19

PHP array_multisort()函数详解的相关文章

php socket函数详解

转自:http://blog.163.com/[email protected]/blog/static/2889641420138213514298/ 最近在用socket实现服务端向客户端主动推送消息函数名 描述socket_accept() 接受一个Socket连接socket_bind() 把socket绑定在一个IP地址和端口上socket_clear_error() 清除socket的错误或最后的错误代码socket_close() 关闭一个socket资源socket_connec

delphi中的Format函数详解

首先看它的声明:[[email protected]][@21ki!] function Format(const Format: string; const Args: array of const): string; overload;[[email protected]][@21ki!] 事实上Format方法有两种形式,另外一种是三个参数的,主要区别在于它是线程安全的,[[email protected]][@21ki!]但并不多用,所以这里只对第一个介绍:[[email protect

c++ 虚函数详解

下面是对C++的虚函数的理解. 一,定义 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数.虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离:用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略.下面来看一段简单的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 classA { publi

linux网络编程之shutdown() 与 close()函数详解

linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 [cpp] view plain copy print? <span style="font-size:13px;">#include<unistd.h> int 

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有

Python内置函数详解

置顶   内置函数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii 此文参考了别人整理好的东西(地址:http://www.cnblogs.com/sesshoumaru/p/6140987.html#p1),然后结合自己的理解,写下来,一方面方便自己,让自己好好学习,顺便回忆回忆:另一方面,让喜欢的盆友也参考一下. 经查询,3.6版本总共有68个内置函数,主要分类如下: 数学运算(7个) 类型转换

【转载】3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解

原文:3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解 3D中z值会影响屏幕坐标系到世界坐标系之间的转换,2D中Z值不会产生影响(而只是屏幕宽高比会产生影响,z值只对深度剔除产生影响).所以U3D中如果用2D摄像机那么屏幕坐标和世界坐标之间的转换需要用指定的2D摄像机才行,如果用主3D摄像机那么UI转换会产生计算结果异常. 一.D3DXMatrixPerspectiveFovLH函数 作用:Builds a left-handed

CreateFile函数详解

CreateFile函数详解 CreateFile The CreateFile function creates or opens the following objects and returns a handle that can be used to accessthe object: files pipes mailslots communications resources disk devices(Windows NT only) consoles directories(open

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult