zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    The EF 6.x DbContextGenerator templates are not available for VS2010
    selenium定位tr及td,并获取其文本及属性
    selenium基本操作
    Git入门
    独热编码OneHotEncoder简介
    openCV中直方图均衡化算法的理解
    pyinstaller生成exe文件失败
    图像形态学运算
    对双边滤波的理解
    PyQt中对RadioButton分组
  • 原文地址:https://www.cnblogs.com/lvchenfeng/p/5333272.html
Copyright © 2011-2022 走看看