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 采集程序 常用函数
Dec 18 PHP
php 判断数组是几维数组
Mar 20 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
如何打开php的gd2库
Feb 09 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 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
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
自动化专业职业生涯规划书范文
2014/01/16 职场文书
计算机学生求职信范文
2014/01/30 职场文书
师德学习感言
2014/01/31 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
高一新生军训感言
2014/03/02 职场文书
广播节目策划方案
2014/05/23 职场文书
民事授权委托书范文
2014/08/02 职场文书
医德考评自我评价
2014/09/14 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
创业计划书之寿司
2019/07/19 职场文书
编写python程序的90条建议
2021/04/14 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers