PHP 二維陣列根據某個欄位排序
阿新 • • 發佈:2019-02-19
本文記錄的要實現的功能類似於 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 */