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 13 PHP
php 高效率写法 推荐
Feb 21 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
php之curl设置超时实例
Nov 03 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
PHP浮点比较大小的方法
Feb 14 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 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邮件发送,php发送邮件的类
2011/03/24 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
Python计算回文数的方法
2015/03/11 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
Python之指数与E记法的区别详解
2019/11/21 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
用python对oracle进行简单性能测试
2020/12/05 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
电大学习个人自我评价范文
2013/10/04 职场文书
工作的心得体会
2013/12/31 职场文书
骨干教师培训方案
2014/05/06 职场文书
小学节能减排倡议书
2014/05/15 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
出国导师推荐信
2015/03/25 职场文书
产品调价通知函
2015/04/20 职场文书
2015年司法所工作总结
2015/04/27 职场文书
用电申请报告范文
2015/05/18 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL