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 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
PHP DataGrid 实现代码
Aug 12 PHP
网站用php实现paypal整合方法
Nov 28 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
php根据生日计算年龄的方法
Jul 13 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 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/04/28 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php eval函数一句话木马代码
2015/05/21 PHP
js 编写规范
2010/03/03 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
vuejs指令详解
2017/02/07 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
JavaScript实现联动菜单特效
2020/01/07 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
python简单读取大文件的方法
2016/07/01 Python
python交换两个变量的值方法
2019/01/12 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
《盲人摸象》教学反思
2014/02/16 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
python基于turtle绘制几何图形
2021/06/15 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android