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 和 MySQL 基础教程(四)
Oct 09 PHP
php Static关键字实用方法
Jun 04 PHP
PHP isset()与empty()的使用区别详解
Aug 29 PHP
php 操作调试的方法
Jul 12 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
php使用google地图应用实例
Dec 31 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php类自动加载器实现方法
Jul 28 PHP
php析构函数的简单使用说明
Aug 24 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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
星际RPG字典
2020/03/04 星际争霸
Apache设置虚拟WEB
2006/10/09 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
Javascript 写的简单进度条控件
2008/01/22 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python输出带颜色的字符串实例
2017/10/10 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
python找出因数与质因数的方法
2019/07/25 Python
python中upper是做什么用的
2020/07/20 Python
Python如何读取、写入JSON数据
2020/07/28 Python
Python extract及contains方法代码实例
2020/09/11 Python
python中二分查找法的实现方法
2020/12/06 Python
视光学专业毕业生推荐信
2013/10/28 职场文书
新员工试用期自我评价
2015/03/10 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
党支部审查意见
2015/06/02 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
婚宴领导致辞
2015/07/28 职场文书