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
数字转英文
Dec 06 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
php调用google接口生成二维码示例
Apr 28 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
PHP中的流(streams)浅析
Jul 02 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 PHP
深入分析PHP设计模式
Jun 15 PHP
PHP 超级全局变量相关总结
Jun 30 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,js双版本
2012/09/25 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
护理实习自我鉴定
2013/12/14 职场文书
洗发露广告词
2014/03/14 职场文书
银行给客户的感谢信
2015/01/23 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android