本文實例講述了PHP實現二維數組按照指定的字段進行排序算法。分享給大家供大家參考,具體如下:
遇到問題:把兩個數組用php自帶的array_merge()
函數合并之后,想按照兩個數組中共有的'post_time'字段為新數組進行排序
解決辦法:通過查閱官方手冊,得知有array_multisort()
這個函數,可以對多個數組或多維數組進行排序,返回排序之后的數組,其中字符串鍵名將被保留,但是數字鍵名將被重新索引,從 0 開始,并以 1 遞增。
下面封裝了這個函數,便于調用:
/** * 二維數組按照指定字段進行排序 * @params array $array 需要排序的數組 * @params string $field 排序的字段 * @params string $sort 排序順序標志 SORT_DESC 降序;SORT_ASC 升序 */function arraySequence($array, $field, $sort = 'SORT_DESC') { $arrSort = array(); foreach ($array as $uniqid => $row) { foreach ($row as $key => $value) { $arrSort[$key][$uniqid] = $value; } } array_multisort($arrSort[$field], constant($sort), $array); return $array;}//測試:$arrDemo = array(array('name'=>'Jack','age'=>'22'),array('name'=>'Tom','age'=>'24'),array('name'=>'Green','age'=>'21'),array('name'=>'Ben','age'=>'23'),);$arrDemo = arraySequence($arrDemo,'age');print_r($arrDemo);
運行結果:
Array
(
[0] => Array
(
[name] => Tom
[age] => 24
)[1] => Array
(
[name] => Ben
[age] => 23
)[2] => Array
(
[name] => Jack
[age] => 22
)[3] => Array
(
[name] => Green
[age] => 21
))
新增:按照指定的多個字段排序
/** * 二維數組按照指定的多個字段進行排序 * * 調用示例:sortArrByManyField($arr,'id',SORT_ASC,'age',SORT_DESC); */function sortArrByManyField(){ $args = func_get_args(); if(empty($args)){ return null; } $arr = array_shift($args); if(!is_array($arr)){ throw new Exception("第一個參數應為數組"); } foreach($args as $key => $field){ if(is_string($field)){ $temp = array(); foreach($arr as $index=> $val){ $temp[$index] = $val[$field]; } $args[$key] = $temp; } } $args[] = &$arr;//引用值 call_user_func_array('array_multisort',$args); return array_pop($args);}//測試:$arrDemo = array(array('name'=>'Jack','age'=>'22'),array('name'=>'Tom','age'=>'24'),array('name'=>'Green','age'=>'21'),array('name'=>'Ben','age'=>'23'),);$arrDemo = sortArrByManyField($arrDemo,'age');print_r($arrDemo);
運行結果:
Array
(
[0] => Array
(
[name] => Green
[age] => 21
)[1] => Array
(
[name] => Jack
[age] => 22
)[2] => Array
(
[name] => Ben
[age] => 23
)[3] => Array
(
[name] => Tom
[age] => 24
))
希望本文所述對大家PHP程序設計有所幫助。
新聞熱點
疑難解答
圖片精選