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
加速XP搜索功能堪比vista
Mar 22 PHP
php mail to 配置详解
Jan 16 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
php自定义apk安装包实例
Oct 20 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
php简单实现多语言切换的方法
May 09 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
简洁的十分钟Python入门教程
2015/04/03 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
python实现图片彩色转化为素描
2019/01/15 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
python 制作磁力搜索工具
2021/03/04 Python
医学专业毕业生个人求职信
2013/12/25 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
工作散漫检讨书
2014/09/16 职场文书
个人四风对照检查材料
2014/09/26 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
瘦西湖导游词
2015/02/03 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers