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 无极分类(递归)实现代码
Jan 05 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
php短址转换实现方法
Feb 25 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 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 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
vue获取form表单的值示例
2019/10/29 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python中删除文件的程序代码
2011/03/13 Python
python中的数据结构比较
2019/05/13 Python
Python Pandas 箱线图的实现
2019/07/23 Python
Python内置函数locals和globals对比
2020/04/28 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
一个C/C++编程面试题
2013/11/10 面试题
GWT的应用有哪两种部署模式
2012/12/21 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
政府信息公开实施方案
2014/05/09 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
思想工作总结范文
2015/08/12 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书