<?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取出的数据是数组,但是需要排序,所以今天搞出一个对数组排序的函数。