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中显示格式化的用户输入
Oct 09 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
Jul 04 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
php4与php5的区别小结(配置异同)
2011/12/20 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
基于python实现雪花算法过程详解
2019/11/16 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
工会经费申请报告
2015/05/15 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android