PHP 二维数组根据某个字段排序的具体实现
author:一佰互联 2019-04-29   click:215
本文记录的要实现的功能类似于 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

*/