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 表单验证实现代码
Mar 10 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
纯php生成随机密码
Oct 30 PHP
非常实用的php验证码类
May 15 PHP
PHP二维数组去重实例分析
Nov 18 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
一次因composer错误使用引发的问题与解决
Mar 06 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
php GUID生成函数和类
2014/03/10 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
js实现返回顶部效果
2017/03/10 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
python实现学生管理系统开发
2020/07/24 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
房屋继承公证书
2014/04/10 职场文书
525心理活动总结
2014/07/04 职场文书
初中家长评语大全
2014/12/26 职场文书