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

转自:http://blog.csdn.net/liruxing1715/article/details/28265495

 

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

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

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

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

  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. */  
<?php
/**
 * 二维数组根据某个字段排序
 * 功能:按照用户的年龄倒序排序
 * @author ruxing.li
 */
header('Content-Type:text/html;Charset=utf-8');
$arrUsers = array(
    array(
            'id'   => 1,
            'name' => '张三',
            'age'  => 25,
    ),
    array(
            'id'   => 2,
            'name' => '李四',
            'age'  => 23,
    ),
    array(
            'id'   => 3,
            'name' => '王五',
            'age'  => 40,
    ),
    array(
            'id'   => 4,
            'name' => '赵六',
            'age'  => 31,
    ),
    array(
            'id'   => 5,
            'name' => '黄七',
            'age'  => 20,
    ),
); 


$sort = array(
        'direction' => 'SORT_DESC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
        'field'     => 'age',       //排序字段
);
$arrSort = array();
foreach($arrUsers AS $uniqid => $row){
    foreach($row AS $key=>$value){
        $arrSort[$key][$uniqid] = $value;
    }
}
if($sort['direction']){
    array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers);
}

var_dump($arrUsers);

/*
输出结果:

array (size=5)
  0 => 
    array (size=3)
      'id' => int 5
      'name' => string '黄七' (length=6)
      'age' => int 20
  1 => 
    array (size=3)
      'id' => int 2
      'name' => string '李四' (length=6)
      'age' => int 23
  2 => 
    array (size=3)
      'id' => int 1
      'name' => string '张三' (length=6)
      'age' => int 25
  3 => 
    array (size=3)
      'id' => int 4
      'name' => string '赵六' (length=6)
      'age' => int 31
  4 => 
    array (size=3)
      'id' => int 3
      'name' => string '王五' (length=6)
      'age' => int 40

*/

 

本文来自于 CSDN,转载请标注出处!原文地址:http://blog.csdn.net/liruxing1715/article/details/28265495

posted @ 2016-03-29 15:55  绿尘枫  阅读(272)  评论(0编辑  收藏  举报