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中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 PHP
php检测useragent版本示例
Mar 24 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php去除html标记的原生函数详解
Jan 27 PHP
PHP处理会话函数大总结
Aug 05 PHP
浅谈php7的重大新特性
Oct 23 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 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
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
在类Unix系统上开始Python3编程入门
2015/08/20 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
Python argparse模块应用实例解析
2019/11/15 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
电子商务自荐书范文
2014/01/04 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
分公司经理任命书
2014/06/05 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
保险公司演讲稿
2014/09/02 职场文书
交通事故被告代理词
2015/05/23 职场文书