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 strcmp使用说明
Apr 22 PHP
PHP 命令行参数详解及应用
May 18 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
php不写闭合标签的好处
Mar 04 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
Yii框架form表单用法实例
Dec 04 PHP
用PHP代码给图片加水印
Jul 01 PHP
Smarty分页实现方法完整实例
May 11 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 PHP
PHP新手指南
Apr 01 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验证session无效的解决方法
2014/11/04 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
jquery easyui使用心得
2014/07/07 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
react build 后打包发布总结
2018/08/24 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python简单判断序列是否为空的方法
2015/06/30 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Python 爬虫性能相关总结
2020/08/03 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
掌上明珠Java程序员面试总结
2016/02/23 面试题
策划主管的工作职责
2013/11/24 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
绿里奇迹观后感
2015/06/15 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL