PHP实现二维数组按照指定的字段进行排序算法示例


Posted in PHP onApril 23, 2019

本文实例讲述了PHP实现二维数组按照指定的字段进行排序算法。分享给大家供大家参考,具体如下:

遇到问题:把两个数组用php自带的array_merge()函数合并之后,想按照两个数组中共有的'post_time'字段为新数组进行排序

解决办法:通过查阅官方手册,得知有array_multisort()这个函数,可以对多个数组或多维数组进行排序,返回排序之后的数组,其中字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。

下面封装了这个函数,便于调用:

/**
 * 二维数组按照指定字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
 */
function arraySequence($array, $field, $sort = 'SORT_DESC') {
 $arrSort = array();
 foreach ($array as $uniqid => $row) {
  foreach ($row as $key => $value) {
   $arrSort[$key][$uniqid] = $value;
  }
 }
 array_multisort($arrSort[$field], constant($sort), $array);
 return $array;
}
//测试:
$arrDemo = array(
array('name'=>'Jack','age'=>'22'),
array('name'=>'Tom','age'=>'24'),
array('name'=>'Green','age'=>'21'),
array('name'=>'Ben','age'=>'23'),);
$arrDemo = arraySequence($arrDemo,'age');
print_r($arrDemo);

运行结果:

Array
(
    [0] => Array
        (
            [name] => Tom
            [age] => 24
        )

    [1] => Array
        (
            [name] => Ben
            [age] => 23
        )

    [2] => Array
        (
            [name] => Jack
            [age] => 22
        )

    [3] => Array
        (
            [name] => Green
            [age] => 21
        )

)

新增:按照指定的多个字段排序

/**
 * 二维数组按照指定的多个字段进行排序
 *
 * 调用示例:sortArrByManyField($arr,'id',SORT_ASC,'age',SORT_DESC);
 */
function sortArrByManyField(){
 $args = func_get_args();
 if(empty($args)){
  return null;
 }
 $arr = array_shift($args);
 if(!is_array($arr)){
  throw new Exception("第一个参数应为数组");
 }
 foreach($args as $key => $field){
  if(is_string($field)){
   $temp = array();
   foreach($arr as $index=> $val){
    $temp[$index] = $val[$field];
   }
   $args[$key] = $temp;
  }
 }
 $args[] = &$arr;//引用值
 call_user_func_array('array_multisort',$args);
 return array_pop($args);
}
//测试:
$arrDemo = array(
array('name'=>'Jack','age'=>'22'),
array('name'=>'Tom','age'=>'24'),
array('name'=>'Green','age'=>'21'),
array('name'=>'Ben','age'=>'23'),);
$arrDemo = sortArrByManyField($arrDemo,'age');
print_r($arrDemo);

运行结果:

Array
(
    [0] => Array
        (
            [name] => Green
            [age] => 21
        )

    [1] => Array
        (
            [name] => Jack
            [age] => 22
        )

    [2] => Array
        (
            [name] => Ben
            [age] => 23
        )

    [3] => Array
        (
            [name] => Tom
            [age] => 24
        )

)

PHP 相关文章推荐
cache_lite试用
Feb 14 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php跨站攻击实例分析
Oct 28 PHP
PHP 验证登陆类分享
Mar 13 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 #PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 #PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 #PHP
PHP信号处理机制的操作代码讲解
Apr 19 #PHP
CentOS7编译安装php7.1的教程详解
Apr 18 #PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 #PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 #PHP
You might like
php5 图片验证码实现代码
2009/12/11 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
php实现加减法验证码代码
2014/02/14 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
Python中的并发编程实例
2014/07/07 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
详解python和matlab的优势与区别
2019/06/28 Python
python re模块常见用法例举
2021/03/01 Python
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
企业法人授权委托书
2014/04/03 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
迟到检讨书
2015/01/26 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers