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
配置支持SSI
Nov 25 PHP
对Session和Cookie的区分与解释
Mar 16 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
May 29 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
微信支付之JSAPI公众号支付详解
May 15 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获取Exif缩略图的方法
2015/07/13 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
python3 shelve模块的详解
2017/07/08 Python
python的多重继承的理解
2017/08/06 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
Python socket模块方法实现详解
2019/11/05 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
普天C++笔试题
2016/03/20 面试题
专科应届生求职信
2013/11/24 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
电话营销开场白
2015/05/29 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书