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取出的数据是数组,但是需要排序,所以今天搞出一个对数组排序的函数。
PHP的数组排序函数的更多相关文章
- php数组排序函数
下边提到的几个数组函数的排序有一些共性: 1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型.2 函数名中出现单a表示association,含义为,在按值排序的 ...
- 常用的php数组排序函数
分享几个php数组排序函数,每个函数出去sort是排序的意思前缀字母的含义分别代表: a 索引 k 数组键 r 逆向 u 用户自定义 顺序排序函数 sort — 对数组排序 ksort — 对数组按 ...
- PHP数组排序函数有哪些
PHP数组排序函数有哪些 一.总结 一句话总结:其实也就是是否保持索引,对键排序还是对值排序,除了sort,rsort.shuffle,usort外,都是保持索引的 是否保持索引 键排序 值排序 除了 ...
- 一个不错的PHP二维数组排序函数简单易用存用
一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...
- Js数组排序函数sort()
JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选.规定排序顺序.必须是函数.) 返回值为对数组的引用:请注 ...
- PHP数组排序函数array_multisort()函数详解
这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家. 原文链接:http://blog.163.com/lgh_2002/blog/static/44017526 ...
- PHP数组排序函数array_multisort()函数详解(二)
array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...
- PHP的一个牛逼的数组排序函数array_multisort
函数详情,具体可参考 官方手册 array_multisort 实际问题是这样的,有这么一组数据: $arr_times = array( array('2018-04-12 04:25:00', 3 ...
- JS中的数组排序函数sort()
JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort ...
随机推荐
- JQ倒计时天时分秒
<div id="times_wrap" class="time_num"> 距离现在时间: <div class="time_w& ...
- Springboot快速入门创建
maven构建项目 1.访问http://start.spring.io/,进入快速创建工程的主页 可参考下图所示: 2.选择构建工具Maven Project.Spring Boot版本1.3.6以 ...
- win7系统下的飞秋发送文件失败问题
飞秋发送文件失败这个问题大多数是由防火墙引起的1.检查windows自带的防火墙设置,在左侧的"允许程序通过windows防火墙"查看飞秋是否存在,不存在则增加之,公网.专网都勾选 ...
- iOS 企业设备管理 补充中。。。
公司的设备都有一个统一的管理方法,以前不太明白,今天看了一下资料. 这里解释了什么是设备管理 Profile Manager creates and distributes configuration ...
- C++内存管理
1. 栈(Stack): 位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效.2. 堆(Heap): 由new申请的内存,由delete负责 ...
- css-关于文本
1. 使用 text-overflow:ellipsis; 超出部分会变成省略号 http://www.w3school.com.cn/tiy/t.asp?f=css3_text-overflow 1 ...
- Nodejs实现简单的反向代理
var http = require('http'), httpProxy = require('http-proxy'); // 新建一个代理 Proxy Server 对象 var proxy = ...
- 虚拟机安装windows服务出现无法打开内核设备“\\.Global\vmx86”
解决方法: 在cmd下依次输入net start vmci,net start vmx86,net start VMnetuserif三个命令即可
- iOS - 如何切图适配各种机型
关于iPhone6/6+适配问题一直有争议,今天小编专门为大家整理了相关的有效方案,希望对大伙儿有帮助! 移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选 ...
- word
# word中向下箭头 原文:http://jingyan.baidu.com/article/c1465413b0a9c70bfcfc4cbc.html 使用替换功能,把^l(l是小写的L)替换为^ ...