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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
PDO::errorInfo讲解
Jan 28 PHP
PHP Include文件实例讲解
Feb 15 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 数组基础知识小结
2010/08/20 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
js字符串转成JSON
2013/11/07 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
python3 shelve模块的详解
2017/07/08 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
快速入门python学习笔记
2017/12/06 Python
Python中实现switch功能实例解析
2018/01/11 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
猫咪家具:CatsPlay
2018/11/03 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
小学运动会报道稿
2015/07/22 职场文书
2015元旦感言
2015/12/09 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书