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&&mysql)四
Oct 09 PHP
PHP无限分类的类
Jan 02 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 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常用函数的用法详解
2013/05/10 PHP
php实现网站留言板功能
2015/11/04 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
JSONP之我见
2015/03/24 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
bpython 功能强大的Python shell
2016/02/16 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
物业经理求职自我评价
2013/09/22 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
2015年读书月活动总结
2015/03/26 职场文书
记者节感言
2015/08/03 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
Python os和os.path模块详情
2022/04/02 Python