PHP 二维数组根据某个字段排序

参考链接:http://blog.csdn.net/liruxing1715/article/details/28265495


本文记录的要实现的功能类似于 MySQL 中的  ORDER BY,上个项目中有遇到这样的一个需求。

要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。

遇到这个要求的时候就不是 ORDER BY 能解决的问题了。因此翻看 PHP 手册查找到了如下方法,做此笔记。

废话少说,奉上代码,清单如下:

[php]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?php  
  2. /** 
  3.  * 二维数组根据某个字段排序 
  4.  * 功能:按照用户的年龄倒序排序 
  5.  * @author ruxing.li 
  6.  */  
  7. header('Content-Type:text/html;Charset=utf-8');  
  8. $arrUsers = array(  
  9.     array(  
  10.             'id'   => 1,  
  11.             'name' => '张三',  
  12.             'age'  => 25,  
  13.     ),  
  14.     array(  
  15.             'id'   => 2,  
  16.             'name' => '李四',  
  17.             'age'  => 23,  
  18.     ),  
  19.     array(  
  20.             'id'   => 3,  
  21.             'name' => '王五',  
  22.             'age'  => 40,  
  23.     ),  
  24.     array(  
  25.             'id'   => 4,  
  26.             'name' => '赵六',  
  27.             'age'  => 31,  
  28.     ),  
  29.     array(  
  30.             'id'   => 5,  
  31.             'name' => '黄七',  
  32.             'age'  => 20,  
  33.     ),  
  34. );   
  35.   
  36.   
  37. $sort = array(  
  38.         'direction' => 'SORT_DESC'//排序顺序标志 SORT_DESC 降序;SORT_ASC 升序  
  39.         'field'     => 'age',       //排序字段  
  40. );  
  41. $arrSort = array();  
  42. foreach($arrUsers AS $uniqid => $row){  
  43.     foreach($row AS $key=>$value){  
  44.         $arrSort[$key][$uniqid] = $value;  
  45.     }  
  46. }  
  47. if($sort['direction']){  
  48.     array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers);  
  49. }  
  50.   
  51. var_dump($arrUsers);  
  52.   
  53. /* 
  54. 输出结果: 
  55.  
  56. array (size=5) 
  57.   0 =>  
  58.     array (size=3) 
  59.       'id' => int 5 
  60.       'name' => string '黄七' (length=6) 
  61.       'age' => int 20 
  62.   1 =>  
  63.     array (size=3) 
  64.       'id' => int 2 
  65.       'name' => string '李四' (length=6) 
  66.       'age' => int 23 
  67.   2 =>  
  68.     array (size=3) 
  69.       'id' => int 1 
  70.       'name' => string '张三' (length=6) 
  71.       'age' => int 25 
  72.   3 =>  
  73.     array (size=3) 
  74.       'id' => int 4 
  75.       'name' => string '赵六' (length=6) 
  76.       'age' => int 31 
  77.   4 =>  
  78.     array (size=3) 
  79.       'id' => int 3 
  80.       'name' => string '王五' (length=6) 
  81.       'age' => int 40 
  82.  
  83. */  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值