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 相关文章推荐
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 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中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
js常用DOM方法详解
2017/02/04 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
给Python入门者的一些编程建议
2015/06/15 Python
python字符串对其居中显示的方法
2015/07/11 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
Django rest framework实现分页的示例
2018/05/24 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
竞争上岗实施方案
2014/03/21 职场文书
儿童生日会策划方案
2014/05/15 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
学生犯错保证书
2015/05/09 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers