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实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
php编写一个简单的路由类
Apr 13 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 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
PHP 反向排序和随机排序代码
2010/06/30 PHP
php文件系统处理方法小结
2016/05/23 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
便捷提取python导入包的属性方法
2018/10/15 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
关于python 跨域处理方式详解
2020/03/28 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
董事长秘书岗位职责
2013/11/29 职场文书
于丹论语心得观后感
2015/06/15 职场文书