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


  本文标签: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

*/