在PHP開發中,我們經常需要對一個數組進行排序操作。如果按照數組中某個字段來進行排序,則能為開發帶來很大便利。下面我們將從多個角度詳細闡述如何實現這一功能。
一、原理簡介
排序本質上就是一種對數據的重組,按照某種方式重新排列原始數據。在PHP中,我們可以使用內置函數sort()來對數組進行排序,也可以通過自定義函數來實現靈活的排序方式。在本文中主要介紹後者的做法。
二、按照某個字段升序排序
如果我們有一個二維數組,如下所示:
$array = array( array('id'=>1,'name'=>'Tom','age'=>20), array('id'=>2,'name'=>'Jerry','age'=>22), array('id'=>3,'name'=>'Alice','age'=>18) );
我們需要按照age字段進行升序排序。
function array_sort($arr,$keys,$type='asc'){ $keysvalue = array(); foreach($arr as $key => $val){ $keysvalue[$key] = $val[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $val){ $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val){ $new_array[$key] = $arr[$val]; } return $new_array; } $new_arr = array_sort($array,'age','asc'); print_r($new_arr);
代碼分析:
①首先定義了一個函數array_sort,接收三個參數:待排序的數組,排序的字段,排序方式(升序或降序)。
②在函數內部,創建一個空數組$keysvalue用來存放待排序字段的原始值。
③遍歷原數組,將待排序字段的值存儲到$keysvalue數組中。
④根據排序方式,在$keysvalue數組中使用asort()或arsort()進行排序。
⑤使用reset()函數將數組指針移動到第一個元素位置。
⑥創建一個$keysort數組,保存排序後的數組的$key(鍵)信息。
⑦創建一個空數組$new_array,通過遍歷$keysort數組按鍵獲取排序後的數組的值。
⑧最後返回排序後的數組$new_array。
三、按照某個字段降序排序
如果我們需要按照某個字段的降序進行排序,則只需要在調用array_sort()函數時將$type參數設置成’desc’即可。
$new_arr = array_sort($array,'age','desc'); print_r($new_arr);
四、按照多個字段排序
有時候我們需要按照多個字段進行排序,可以通過修改array_sort()函數來實現。
function array_sort_multi($arr,$keys){ $sort_arr = array(); foreach($arr as $v){ foreach($keys as $key){ $sort_arr[$key][] = $v[$key]; } } array_multisort($sort_arr[$keys[0]],SORT_DESC,$arr); for($i=1;$i<count($keys);$i++){ array_multisort($sort_arr[$keys[$i]],SORT_ASC,$arr); } return $arr; } $new_arr = array_sort_multi($array,array('age','id')); print_r($new_arr);
代碼分析:
①在函數array_sort_multi()中,我們首先需要將需要排序的字段存儲在$sort_arr數組中,使用array_multisort()函數可以對$sort_arr數組進行多列排序。
②此時$sort_arr數組已經是排序後的,按照它進行$data數組的排序操作即可。
③最後返回排序後的數組$data。
五、總結
PHP中按照數組中某個字段進行排序是一個很常見的需求,掌握了這個技巧,能夠讓我們的開發變得更為簡便。在實際開發中,還需要注意到一些性能問題,根據實際情況選擇合適的排序方式和算法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/196179.html