PHP的數組排序函數
<?php class order{ /** * * 數組排序 * @param array $arr 例如: * array ( array ( 'deskId' => '460646', 'deskName' => '房間1', 'userCount' => '2', 'miniGold' => '100', ), array ( 'deskId' => '460647', 'deskName' => '房間2', 'userCount' => '1', 'miniGold' => '100', ) ); * @param string $order_by 根據哪個字段排序,如多個字段,用逗號隔開,有先后順序。 * 例如:userCount:desc,serverPort,miniGold:asc * 冒號前:數組字段,冒號后:排序規則(排序規則不用區分大小寫) * 如排序規則未填,默認DESC * */ function quick_sort($arr=array(),$order_by=NULL){ $order_arr = array(); $type_arr = array(); if(count($arr)<=1) return $arr;//如果個數不大于一,直接返回 if(is_string($order_by)){ $order_arr = explode(',', $order_by); if(is_array($order_arr)){ foreach ($order_arr as $k=>$v){ $o_arr = explode(':', $v); $order_arr[$k] = isset($o_arr[0])?$o_arr[0]:'desc'; $type_arr[$k] = isset($o_arr[1])?$o_arr[1]:'desc'; } }else{ exit('param format error!'); } } $left_arr=array(); $right_arr=array(); for($i=1;$i<count($arr);$i++){ $cnt = count($order_arr); foreach ($type_arr as $t_key=>$t_val){ $type = strtolower($t_val); $order_by = $order_arr[$t_key]; $key=$arr[0][$order_by]; if($type == 'asc'){ //從小到大 if($arr[$i][$order_by]<$key){ $left_arr[]=$arr[$i];break; }else if($arr[$i][$order_by]>$key){ $right_arr[]=$arr[$i];break; }else{ if($cnt == $t_key+1){ //最后的排序未符合規則 $right_arr[]=$arr[$i]; } continue; } }else{ //從大到小 if($arr[$i][$order_by]>$key){ $left_arr[]=$arr[$i];break; }else if($arr[$i][$order_by]<$key){ $right_arr[]=$arr[$i];break; }else{ if($cnt == $t_key+1){ //最后的排序未符合規則 $left_arr[]=$arr[$i]; } continue; } } } } $left_arr = $this->quick_sort($left_arr,$order_by,$type); $right_arr = $this->quick_sort($right_arr,$order_by,$type); return array_merge($left_arr,array($arr[0]),$right_arr); } }
redis取出的數據是數組,但是需要排序,所以今天搞出一個對數組排序的函數。
浙公網安備 33010602011771號