PHP实现的多维数组排序算法分析


Posted in PHP onFebruary 10, 2018

本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下:

突然想起了一道面试题,把一个多维数组排序。

例:

<?php
//有一个多维数组
$a = array(
  array('key1'=>940, 'key2'=>'blah'),
  array('key1'=>23, 'key2'=>'this'),
  array('key1'=>894, 'key2'=>'that')
);
//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
//1.对key1的值进行排序
function asc_key1_sort($x, $y) {
  //可以输出一下看看是怎么比较的
  echo 'Iteration:'.$x['key1'].' vs '.$y['key1'];
  if($x['key1'] > $y['key1']) {
    echo 'true<br/>';
    return true;
  }elseif($x['key1'] < $y['key1']) {
    echo 'false<br/>';
    return false;
  }else {
    echo '0';
    return 0;
  }
}
//进行排序
usort($a, 'asc_key1_sort');
var_dump($a);
//2.对key2字符进行排序
function asc_key2_sort($x, $y) {
  //可以使用strcasecmp()函数进行排序
  echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>';
  return strcasecmp($x['key2'], $y['key2']);
}
//进行排序
usort($a, 'asc_key2_sort');
var_dump($a);
?>

运行结果:

Iteration:23 vs 940false
Iteration:894 vs 23true
Iteration:940 vs 23true
Iteration:894 vs 940false
array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
Iteration:blah vs that
array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

如果我的多维数组中也有key值呢?

<?php
//有一个多维数组
$a = array(
  123 => array('key1'=>940, 'key2'=>'blah'),
  349 => array('key1'=>23, 'key2'=>'this'),
  43 => array('key1'=>894, 'key2'=>'that')
);
//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
//1.对key1的值进行排序
function asc_key1_sort($x, $y) {
  //可以输出一下看看是怎么比较的
  echo 'Iteration:'.$x['key1'].' vs '.$y['key1'];
  if($x['key1'] > $y['key1']) {
    echo 'true<br/>';
    return true;
  }elseif($x['key1'] < $y['key1']) {
    echo 'false<br/>';
    return false;
  }else {
    echo '0';
    return 0;
  }
}
//进行排序
usort($a, 'asc_key1_sort');
var_dump($a);
//2.对key2字符进行排序
function asc_key2_sort($x, $y) {
  //可以使用strcasecmp()函数进行排序
  echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>';
  return strcasecmp($x['key2'], $y['key2']);
}
//进行排序
usort($a, 'asc_key2_sort');
var_dump($a);
?>

运行结果:

Iteration:23 vs 940false
Iteration:894 vs 23true
Iteration:940 vs 23true
Iteration:894 vs 940false
array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
Iteration:blah vs that
array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

这样的排序结果不会保留123,349,43。这时候只要把usort()换成uasort就好啦!

PHP 相关文章推荐
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php生成扇形比例图实例
Nov 06 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 #PHP
PHP实现APP微信支付的实例讲解
Feb 10 #PHP
PHP有序表查找之插值查找算法示例
Feb 10 #PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 #PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 #PHP
PHP基于redis计数器类定义与用法示例
Feb 08 #PHP
php处理抢购类功能的高并发请求
Feb 08 #PHP
You might like
PHP实现时间轴函数代码
2011/10/08 PHP
PHP的5个安全措施小结
2012/07/17 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
django的ORM操作 增加和查询
2019/07/26 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
python如何保存文本文件
2020/06/07 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
企业总经理岗位职责
2014/02/13 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
运动会班级口号
2014/06/09 职场文书
防灾减灾标语
2014/10/07 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书