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的范围解析操作符(::)的含义分析说明
Jul 03 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
destoon数据库表说明汇总
Jul 15 PHP
php单文件版在线代码编辑器
Mar 12 PHP
PHP递归实现层级树状展开
Apr 01 PHP
php时间计算相关问题小结
May 09 PHP
php组合排序简单实现方法
Oct 15 PHP
php生成二维码图片方法汇总
Dec 17 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php的无刷新操作实现方法分析
Feb 28 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-MySQL教程归纳总结
2008/06/07 PHP
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
CCPry JS类库 代码
2009/10/30 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
python3 批量获取对应端口服务的实例
2019/07/25 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
教师找工作推荐信
2013/11/23 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers
mysql全面解析json/数组
2022/07/07 MySQL
TS 类型收窄教程示例详解
2022/09/23 Javascript