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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
php读取csv文件并输出的方法
Mar 14 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
php实现简单的上传进度条
Nov 17 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
详解php用static方法的原因
Sep 12 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
如何在PHP中生成随机数
2020/06/04 PHP
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
angular5 httpclient的示例实战
2018/03/12 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
python使用epoll实现服务端的方法
2018/10/16 Python
keras K.function获取某层的输出操作
2020/06/29 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
会议邀请函范文
2014/01/09 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
促销活动总结范文
2014/04/30 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
党支部换届选举方案
2014/05/08 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
督导岗位职责
2015/02/04 职场文书
大学生村官入党自传
2015/06/26 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
PHP正则表达式之RCEService回溯
2022/04/11 PHP