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学习之 循环结构实现代码
Jun 09 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
PHP实现微信发红包程序
Aug 24 PHP
php编程每天必学之验证码
Mar 03 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
php文件上传、下载和删除示例
Aug 28 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
PHP数据类型的总结分析
2013/06/13 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
详解django的serializer序列化model几种方法
2018/10/16 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
Python更新所有已安装包的操作
2020/02/13 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
优秀毕业生求职信范文
2014/01/02 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
会计的岗位职责
2014/03/15 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
在Docker容器中部署SQL Server
2022/04/11 Servers