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 相关文章推荐
生成静态页面的PHP类
Jul 15 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 PHP
php微信开发之谷歌测距
Jun 14 PHP
php实现QQ小程序发送模板消息功能
Sep 18 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
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
Python中内建函数的简单用法说明
2016/05/05 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
使用Python对Access读写操作
2017/03/30 Python
python图书管理系统
2020/04/05 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python设置随机种子实例讲解
2019/09/12 Python
Django实现文件上传下载功能
2019/10/06 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
中专自我鉴定
2014/02/05 职场文书
员工考核评语大全
2014/04/26 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
辞职信如何写
2015/02/27 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
大学生暑假实习总结
2015/07/13 职场文书
Redis基本数据类型Set常用操作命令
2022/06/01 Redis
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL