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者的疑难问答(2)
Oct 09 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
php GeoIP的使用教程
Mar 09 PHP
php 获取全局变量的代码
Apr 21 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
php跨服务器访问方法小结
May 12 PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 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正则校验用户名介绍
2008/07/19 PHP
php开启openssl的方法
2014/05/15 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
JS上传前预览图片实例
2013/03/25 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
vue中的mvvm模式讲解
2019/01/31 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
Vue.js中的高级面试题及答案
2020/01/13 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
在Django的session中使用User对象的方法
2015/07/23 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
python开根号实例讲解
2020/08/30 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
心得体会怎么写
2013/12/30 职场文书
打架检讨书400字
2014/01/17 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
模范班主任事迹材料
2014/12/17 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
python迷宫问题深度优先遍历实例
2021/06/20 Python