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 相关文章推荐
火车头采集器3.0采集图文教程
Mar 17 PHP
PHP学习笔记之数组篇
Jun 28 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
php检测url是否存在的方法
Apr 14 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 PHP
PHP接入支付宝接口失效流程详解
Nov 10 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
jQuery动态添加
2016/04/07 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
python自定义异常实例详解
2017/07/11 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
Python如何安装第三方模块
2020/05/28 Python
python如何实现递归转非递归
2021/02/25 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
爱之链教学反思
2014/04/30 职场文书
建筑安全生产责任书
2014/07/22 职场文书
委托证明书
2014/09/17 职场文书
大学生实习推荐信
2015/03/27 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
关于python类SortedList详解
2021/09/04 Python
nginx之内存池的实现
2022/06/28 Servers
Vue深入理解插槽slot的使用
2022/08/05 Vue.js