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 */