本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。
要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。
遇到这个要求的时候就不是 ORDER BY 能解决的问题了。因此翻看 PHP 手册查找到了如下方法,做此笔记。
废话少说,奉上代码,清单如下:
<BR><?php <span>%本文来源gaodai#ma#com搞*代#码9网#</span><strong>搞gaodaima代码</strong><BR>/** <BR>* 二维数组根据某个字段排序 <BR>* 功能:按照用户的年龄倒序排序 <BR>* @author ruxing.li <BR>*/ <BR>header('Content-Type:text/html;Charset=utf-8'); <BR>$arrUsers = array( <BR>array( <BR>'id' => 1, <BR>'name' => '张三', <BR>'age' => 25, <BR>), <BR>array( <BR>'id' => 2, <BR>'name' => '李四', <BR>'age' => 23, <BR>), <BR>array( <BR>'id' => 3, <BR>'name' => '王五', <BR>'age' => 40, <BR>), <BR>array( <BR>'id' => 4, <BR>'name' => '赵六', <BR>'age' => 31, <BR>), <BR>array( <BR>'id' => 5, <BR>'name' => '黄七', <BR>'age' => 20, <BR>), <BR>); <br><br><BR>$sort = array( <BR>'direction' => 'SORT_DESC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序 <BR>'field' => 'age', //排序字段 <BR>); <BR>$arrSort = array(); <BR>foreach($arrUsers AS $uniqid => $row){ <BR>foreach($row AS $key=>$value){ <BR>$arrSort[$key][$uniqid] = $value; <BR>} <BR>} <BR>if($sort['direction']){ <BR>array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers); <BR>} <br><br>var_dump($arrUsers); <br><br>/* <BR>输出结果: <br><br>array (size=5) <BR>0 => <BR>array (size=3) <BR>'id' => int 5 <BR>'name' => string '黄七' (length=6) <BR>'age' => int 20 <BR>1 => <BR>array (size=3) <BR>'id' => int 2 <BR>'name' => string '李四' (length=6) <BR>'age' => int 23 <BR>2 => <BR>array (size=3) <BR>'id' => int 1 <BR>'name' => string '张三' (length=6) <BR>'age' => int 25 <BR>3 => <BR>array (size=3) <BR>'id' => int 4 <BR>'name' => string '赵六' (length=6) <BR>'age' => int 31 <BR>4 => <BR>array (size=3) <BR>'id' => int 3 <BR>'name' => string '王五' (length=6) <BR>'age' => int 40 <br><br>*/ <BR>