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的配置文件php.ini
Oct 09 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 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中smarty模板条件判断用法实例
2015/06/11 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
Python内置函数reversed()用法分析
2018/03/20 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
李敖北大演讲稿
2014/05/24 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2015年采购工作总结
2015/04/10 职场文书
小学生安全保证书
2015/05/09 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python