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 柱状图实现代码
Dec 04 PHP
PHP开发微信支付的代码分享
May 25 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
PHP的PDO连接讲解
Jan 24 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
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
详解javascript函数的参数
2015/11/10 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
深入探究node之Transform
2017/07/20 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
python实现的重启关机程序实例
2014/08/21 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
领导干部考察材料
2014/02/08 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
毕业生应聘求职信
2014/07/10 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
python数字图像处理实现图像的形变与缩放
2022/06/28 Python