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类
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
php获得文件扩展名三法
Nov 25 PHP
用php实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
php中的ini配置原理详解
Oct 14 PHP
php绘制一个扇形的方法
Jan 24 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
ThinkPHP中html:list标签用法分析
Jan 09 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 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的安全
2006/10/09 PHP
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
python实现视频压缩功能
2020/12/18 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
AJax面试题
2014/11/25 面试题
大学生作弊检讨书
2014/02/19 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
地震捐款简报
2015/07/21 职场文书
Python自动化实战之接口请求的实现
2022/05/30 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android