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 ...
随机推荐
- spark 快速入门 java API
Spark的核心就是RDD,对SPARK的使用入门也就是对RDD的使用,包括action和transformation 对于Java的开发者,单单看文档根本是没有办法理解每个API的作用的,所以每个S ...
- 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)
1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php 3.安装php-mysql 命令:yum install php ...
- 原生js焦点轮播图
原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...
- maven打包问题
<build> <finalName>项目名</finalName> <!-- 配置maven打包时过滤的文件 --> <resources> ...
- MYSQL字符类型数值排序
今天遇到MySQL数字排序问题,我的排序字段是经过计算后的,而计算后的字段直接拿来排序就会按照字符一个个排序,所以这里找到简单的方法, ORDER BY 排序字段* 或者 ORDER BY 排序字段+ ...
- Jquery知识点
Jquery $代表选择器 JS 选取元素 操作内容 操作属性 操作样式 <div id="aa" style="width:100px; height:100px ...
- Redis基本信息
1.Windows安装地址 https://github.com/MSOpenTech/redis/releases 2.命令行方式运行 执行redis-cli.exe 3.待续
- 前端知识杂烩(Javascript篇)
1. JavaScript是一门什么样的语言,它有什么特点?2.JavaScript的数据类型都有什么?3.请描述一下 cookies,sessionStorage 和 localStorage 的区 ...
- 制作bat脚本,抓取Android设备logcat
::bat制作抓取Android设备的logcat,并保存以时间命名的txt文件至设备目录 1 @ECHO off adb wait-for-device ECHO 正在连接设备 adb logcat ...
- sqlserver 查找某个字段在哪张表里
select [name] from [库名].[dbo].sysobjects where id in(select id from [库名].[dbo].syscolumns Where name ...