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 相关文章推荐
安装APACHE
Jan 15 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
php中的ini配置原理详解
Oct 14 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
Zend Framework入门教程之Zend_Session会话操作详解
Dec 08 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
PHP的PDO连接讲解
Jan 24 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
Laravel实现ApiToken认证请求
Oct 14 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php 多文件上传的实现实例
2016/10/23 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
FCK调用方法..
2006/12/21 Javascript
不错的JS中变量相关的细节分析
2007/08/13 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Python魔术方法专题
2020/06/19 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
Django url 路由匹配过程详解
2021/01/22 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
婚礼答谢宴主持词
2014/03/14 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
机关作风建设心得体会
2014/10/22 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
高三教师工作总结2015
2015/07/21 职场文书
Python 全局空间和局部空间
2022/04/06 Python