PHP 二维数组根据某个字段排序的具体实现

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

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

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

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

  

复制代码 代码如下:

  <?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

  */