php多维数组排序方法
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-01 16:53:46 浏览: 评论:0
本文章详细的介绍了关于多维数组排序的方法,array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列——有点拗口.
先举个例子,例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位,代码如下:
- <?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有所了解一看估计就明白了,代码如下:
- <?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?其实真的差不多,现在我们再看一个更加贴近实际应用的例子,代码如下:
- <?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 )
- )
看到了吧,其实也很简单,就是那几个需要大写的参数有点烦人而已,虽说也有点难以理解,但是理解了就好了,将来很有用的.
排序顺序标志:
SORT_ASC – 按照上升顺序排序
SORT_DESC – 按照下降顺序排序
排序类型标志:
SORT_REGULAR – 将项目按照通常方法比较
SORT_NUMERIC – 将项目按照数值比较
SORT_STRING – 将项目按照字符串比较
每个数组之后不能指定两个同类的排序标志,每个数组后指定的排序标志仅对该数组有效 – 在此之前为默认值 SORT_ASC 和 SORT_REGULAR.
Tags: php多维数组 排序方法
- 上一篇:php中对象转换数组与数组转换对象实例
- 下一篇:php数组指针用法详解
相关文章
- ·一个简单的PHP中多维数组的排序(2014-01-16)
- ·php判断多维数组是否存在某个值(2014-07-10)
- ·php多维数组排序与操作函数(2014-08-05)
- ·php一维数组排序与多维数组排序(2014-09-09)
- ·PHP多维数组排序实现程序代码(2014-09-14)
- ·array_multisort 多维数组排序函数(2014-09-18)
- ·php遍历二维数组与多维数组代码(2014-09-19)
- ·php对多维数组的某个键值排序方法(2015-04-11)
- ·php 多维数组排序 array_multisort函数用法(2015-12-10)
- ·php多维数组的排序方式(2016-07-27)
- ·php多维数组转一维数组的函数(2016-08-25)
- ·迅速确定php多维数组的深度的方法(2020-08-25)
- ·3个PHP多维数组转为一维数组的方法实例(2020-10-28)
- ·php中多维数组按指定value排序的实现代码(2021-04-03)
- ·php实现多维数组中每个单元值(数字)翻倍的方法(2021-05-14)
- ·php根据某字段对多维数组进行排序的方法(2021-05-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)