PHP 二维数组根据某个字段排序的具体实现
要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。
遇到这个要求的时候就不是ORDERBY能解决的问题了。因此翻看PHP手册查找到了如下方法,做此笔记。
废话少说,奉上代码,清单如下:
<?php
/**
*二维数组根据某个字段排序
*功能:按照用户的年龄倒序排序
*@authorruxing.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($arrUsersAS$uniqid=>$row){
foreach($rowAS$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'=>int5
'name'=>string'黄七'(length=6)
'age'=>int20
1=>
array(size=3)
'id'=>int2
'name'=>string'李四'(length=6)
'age'=>int23
2=>
array(size=3)
'id'=>int1
'name'=>string'张三'(length=6)
'age'=>int25
3=>
array(size=3)
'id'=>int4
'name'=>string'赵六'(length=6)
'age'=>int31
4=>
array(size=3)
'id'=>int3
'name'=>string'王五'(length=6)
'age'=>int40
*/