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中上传大体积文件时需要的设置
Oct 09 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php获取301跳转URL简单实例
Dec 16 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
php检测文件编码的方法示例
Apr 25 PHP
php 删除cookie方法详解
Dec 01 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
php常用数学函数汇总
2014/11/21 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP常用的小程序代码段
2015/11/14 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
Python实现八皇后问题示例代码
2018/12/09 Python
python单例模式的多种实现方法
2019/07/26 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
python中pickle模块浅析
2020/12/29 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
static关键字的用法
2013/10/07 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
经理聘任证明
2015/03/02 职场文书
运动会1000米加油稿
2015/07/21 职场文书
情况说明书怎么写
2015/10/08 职场文书
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript