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 相关文章推荐
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 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 expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
php去掉文件前几行的方法
2015/07/29 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
python解析json实例方法
2013/11/19 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python中的colorlog库使用详解
2019/07/05 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
信息管理与信息系统专业求职信
2014/06/21 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python