这个函数由于用到了,而且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给你们。php
原文连接:http://blog.163.com/lgh_2002/blog/static/4401752620115242345435/算法
array_multisort()这个函数能够对多个PHP数组进行排序,排序结果是全部的数组都按第一个数组的顺序进行排列——有点拗口,真的,而且我要只是这样说你必定也不明白。先举个例子:sql
例如array_multisort($a,$b),$a,$b是两个数组,若是排序以后,$a数组的第3个元素被排到了第一位,那么$b的第三个元素无论他在$b中的大小都会排在第一位。看看下边的程序运行结果:数据库
1 |
<?php |
运行结果:
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()先把第一个数组按照键值的大小排序,而后其它数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第二位……——其实这个多维数组排序算法的最基本体现!spa
不过须要注意的是:两个数组的元素个数必须相同,否则就会出现一个警告信息:
Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in ……blog
好了,但愿上边的你们也能用上,我们仍是说主要的吧:array_multisort()对多维数组进行排序,这个功能未来作项目的时候是很是有用的!排序
首先咱们看看对多维数组的每一元素[数组]进行排序的操做方法,很简单,可是有几个参数须要说明一下,若是您对sql有所了解一看估计就明白了:ci
1 |
<?php |
说明一下:首先咱们用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?其实真的差很少!
如今咱们再看一个更加贴近实际应用的例子:
1 |
<?php |
这个例子的$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 )
)
看到了吧,其实也很简单,就是那几个须要大写的参数有点烦人而已!虽然说也有点难以理解,可是理解了就行了,未来颇有用的哦!