php中二维数组排序问题方法详解


Posted in PHP onAugust 28, 2015

PHP中二维数组排序,可以使用PHP内置函数uasort()

示例一:

使用用户自定义的比较函数对数组中的值进行排序并保持索引关联

回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示回调函数的第一个参数在前,第二个参数在后排列

$person = array(
  array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21),
  array('num'=>'001','id'=>7,'name'=>'ahangsan','age'=>23),
  array('num'=>'003','id'=>1,'name'=>'bhangsan','age'=>23),
  array('num'=>'001','id'=>3,'name'=>'dhangsan','age'=>23),
);
//负数或者false表示第一个参数应该在前
function sort_by_name($x,$y){
  return strcasecmp($x['name'],$y['name']);
}

使用如下:

uasort($person,'sort_by_name');

下面给出一个二维数组排序的方法,供参考和面试使用:

//$array 要排序的数组
//$row  排序依据列
//$type 排序类型[asc or desc]
//return 排好序的数组
function array_sort($array,$row,$type){
  $array_temp = array();
  foreach($array as $v){
    $array_temp[$v[$row]] = $v;
  }
  if($type == 'asc'){
    ksort($array_temp);
  }elseif($type='desc'){
    krsort($array_temp);
  }else{
  }
  return $array_temp;
}

示例二:

一维数组排序可以使用asort、ksort等一些方法进程排序,相对来说比较简单。二维数组的排序怎么实现呢?使用array_multisort和usort可以实现

例如像下面的数组:

代码如下:

$users = array(
  array('name' => 'tom', 'age' => 20)
  , array('name' => 'anny', 'age' => 18)
  , array('name' => 'jack', 'age' => 22)
);

希望能按照age从小到大进行排序。笔者整理了两个方法出来,分享给大家。

1、使用array_multisort

使用这个方法,会比较麻烦些,要将age提取出来存储到一维数组里,然后按照age升序排列。具体代码如下:

代码如下:

$ages = array();
foreach ($users as $user) {
  $ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);

执行后,$users就是排序好的数组了,可以打印出来看看。如果需要先按年龄升序排列,再按照名称升序排列,方法同上,就是多提取一个名称数组出来,最后的排序方法这样调用:

代码如下:

array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

2、使用usort

使用这个方法最大的好处就是可以自定义一些比较复杂的排序方法。例如按照名称的长度降序排列:

代码如下:

usort($users, function($a, $b) {
      $al = strlen($a['name']);
      $bl = strlen($b['name']);
      if ($al == $bl)
        return 0;
      return ($al > $bl) ? -1 : 1;
    });

这里使用了匿名函数,如果有需要也可以单独提取出来。其中$a, $b可以理解为$users数组下的元素,可以直接索引name值,并计算长度,而后比较长度就可以了。

=====================================================================

这里顺便说一下PHP排序的几个函数

sort 对数组排序一般适用于一维索引数组,不会保持索引

rsort 对数组逆向排序 和sort用法一致

asort 对数组进行排序并保持索引关系对值进行排序,一般适用于一维数组,保持索引关系

arsort 对数组进行逆向排序并保持索引关系和asort用法一致

ksort 对数组按照键名排序

krsort 对数组按照键名逆向排序

PHP 相关文章推荐
写一个用户在线显示的程序
Oct 09 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
fgetcvs在linux的问题
Jan 15 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP读取PPT文件的方法
Dec 10 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
Jan 22 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 #PHP
PHP生成随机密码方法汇总
Aug 27 #PHP
windows下apache搭建php开发环境
Aug 27 #PHP
php给图片添加文字水印方法汇总
Aug 27 #PHP
微信公众平台开发之配置与请求
Aug 26 #PHP
php基础教程
Aug 26 #PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 #PHP
You might like
一个ubbcode的函数,速度很快.
2006/10/09 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
js的一些常用方法小结
2011/06/29 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue计算属性和监听器实例解析
2018/05/10 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
工商企业管理实习自我鉴定
2013/12/04 职场文书
迟到检讨书1000字
2014/01/15 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
感谢信模板大全
2015/01/23 职场文书
安全责任书
2015/01/29 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
解析原生JS getComputedStyle
2021/05/25 Javascript
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
Golang jwt身份认证
2022/04/20 Golang