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
php 中文和编码判断代码
May 16 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
php中关于换行的实例写法
Sep 26 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
yii用户注册表单验证实例
2015/12/26 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
python中pivot()函数基础知识点
2021/01/03 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
中职生自我鉴定范文
2013/10/03 职场文书
团组织关系介绍信
2014/01/12 职场文书
公司营业员的自我评价
2014/03/04 职场文书
教师考核材料
2014/05/21 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
医院科室评语
2015/01/04 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书