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 相关文章推荐
解决phpmyadmin 乱码,支持gb2312和utf-8
Nov 20 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
Jun 27 PHP
smarty简单分页的实现方法
Oct 27 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
php实现简单的MVC框架实例
Sep 23 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
laravel学习教程之存取器
Jul 30 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
详解Laravel服务容器的绑定与解析
Nov 05 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
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
javascript实现日历效果
2019/06/17 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
实例详解Python装饰器与闭包
2019/07/29 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python模块相关知识点小结
2020/03/09 Python
基于python实现操作git过程代码解析
2020/07/27 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
几道PHP面试题
2013/04/14 面试题
医学专业个人求职自荐信格式
2013/09/23 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js
利用Java连接Hadoop进行编程
2022/06/28 Java/Android