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 相关文章推荐
做个自己站内搜索引擎
Oct 09 PHP
一贴学会PHP 新手入门教程
Aug 03 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
php实现微信公众号无限群发
Oct 11 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 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中显示数组与对象的实现代码
2011/04/18 PHP
php实现rc4加密算法代码
2012/04/25 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
2014/09/22 PHP
jquery.validate的使用说明介绍
2013/11/12 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
使用django实现一个代码发布系统
2019/07/18 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
python super函数使用方法详解
2020/02/14 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
大学生职业生涯规划书汇总
2014/03/20 职场文书
财务会计专业求职信
2014/06/09 职场文书
委托培训协议书
2014/11/17 职场文书
先进人物事迹材料
2014/12/29 职场文书
患者身份识别制度
2015/08/06 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
python之django路由和视图案例教程
2021/07/26 Python
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题