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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
用PHP连接MySQL代码的参数说明
Jun 07 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
php实现在服务器上创建目录的方法
Mar 16 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
php如何比较两个浮点数是否相等详解
Feb 12 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
关于页面优化和伪静态
2009/10/11 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
javascript preload&lazy load
2010/05/13 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
Atom的python插件和常用插件说明
2018/07/08 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
英格兰足协官方商店:England Store
2019/07/12 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
企业贷款委托书格式
2014/09/12 职场文书
大学生见习总结报告
2015/06/24 职场文书
亲情作文之母爱
2019/09/25 职场文书
Python 视频画质增强
2022/04/28 Python