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将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
微信 getAccessToken方法详解及实例
Nov 23 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 PHP
laravel清除视图缓存的代码
Oct 23 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
TypeScript具有的几个不同特质
2015/04/07 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
jQuery的框架介绍
2016/05/11 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
js实现网页随机验证码
2020/10/19 Javascript
星球大战与Python之间的那些事
2016/01/07 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
简短证婚人证婚词
2014/01/09 职场文书
学校大课间活动方案
2014/01/30 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
欢迎横幅标语
2014/06/17 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers