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 23 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
检测png图片是否完整的php代码
Sep 06 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
浅析PHP绘图技术
Jul 03 PHP
php实现将Session写入数据库
Jul 26 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
简单解析PHP程序的运行流程
Jun 23 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP批量删除jQuery操作
Jul 23 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 程序员应该使用的10个组件
2009/10/31 PHP
小谈php正则提取图片地址
2014/03/27 PHP
ThinkPHP之getField详解
2014/06/20 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
python list格式数据excel导出方法
2018/10/31 Python
Python实现最大子序和的方法示例
2019/07/05 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
python标记语句块使用方法总结
2019/08/05 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
临床医师专业个人自我评价
2014/01/08 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
项目经理岗位职责
2015/01/31 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
聘任合同书
2015/09/21 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
股东协议书范本2016
2016/03/21 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL