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 VS ASP
Oct 09 PHP
PHP Ajax实现页面无刷新发表评论
Jan 02 PHP
PHP网站基础优化方法小结
Sep 29 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php统计文章排行示例
Mar 04 PHP
PHP7多线程搭建教程
Apr 21 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 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
11个PHPer必须要了解的编程规范
2014/09/22 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
.net笔试题
2014/03/03 面试题
暑期实践思想汇报
2014/01/06 职场文书
高三地理教学反思
2014/01/11 职场文书
毕业自我鉴定书
2014/03/24 职场文书
行政上诉状范文
2015/05/23 职场文书
外出培训学习心得体会
2016/01/18 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python
《废话连篇——致新手》——chinapizza
2022/04/05 无线电
vue 自定义组件添加原生事件
2022/04/21 Vue.js