热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一些php数组排序函数示例总结

在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php自带的排序函数了,但多维数组时我们需要自己写了。回来后

在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。

回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案,为了记住它们,我决定来一个数组排序函数大总结。

首先接触的就是PHP数组排序、降序的排序问题。

sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。 

rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。

asort:对数组进行排序并保持索引关系 

arsort:对数组进行逆向排序并保持索引关系

ksort:对数组按照键名排序,保留键名到数据的关联 

krsort:对数组按照键名逆向排序,保留键名到数据的关联

natsort:对字母数字字符串进行排序并保持原有键/值的关联 

natcasesort:同natsort排序算法,但不区分大小写字母排序

PHP 数组排序(sort) 

数字索引数组排序:

函数:sort(array, [sort type]) 

说明:sort()函数按升序对指定数组(第一个参数)进行排序。 

sort函数第二参数作用为指定排序类型,是可选参数.

SORT_REGULAR: 默认值,不改变类型进行排序; 

SORT_NUMERIC: 把值作为数字进行排序;

SORT_STRING: 把值作为字符串进行排序;

如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;

一、一维数组

假设有一个一维数组,如下:

$sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051"); 

print_r()输出的原始数组结果为:

Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort()函数:根据数组下标进行升序排列;

print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;

print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort()函数:根据数组的键名进行升序排列;

print_r()输出的数组结果为:

Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;

print_r()输出的数组结果为:

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort()函数:根据数组的键值进行升序排列;

print_r()输出的数组结果为:

Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;

print_r()输出的数组结果为:

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array()函数:反向当前的数组排列顺序;

print_r()输出的数组结果为:

Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);

print_r()输出的数组结果为(只是其中一种随机排列):

Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

二、二维数组

假设有一个二维数组,代码如下:

  1. $person = array
  2.  array("hiro""23""suzhou"), 
  3.  array("yoyo""25""shanghai"), 
  4.  array("janstar""28""xinjiang"
  5. );  
  6. //print_r()输出的原始数组结果为: 
  7.  Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:

1.按每维的第一个元素升序排列,代码如下:

  1. function compare0($x$y) { 
  2.  if($x[0] == $t[0]) { 
  3.   return 0; 
  4.  } elseif ($x[0] < $y[0]) { 
  5.   return -1; 
  6.  } else { 
  7.   return 1; 
  8.  } 
  9.  
  10. usort($person, compare0); 
  11. echo "按第一个元素正向排序:"
  12. print_r($person);  
  13. //输出的结果如下: 
  14.  按第一个元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

2.按每维的第三个元素升序排列,代码如下:

  1. function compare2($x$y) { 
  2.  if($x[2] == $t[2]) { 
  3.   return 0; 
  4.  } elseif ($x[2] < $y[2]) { 
  5.   return -1; 
  6.  } else { 
  7.   return 1; 
  8.  } 
  9.  
  10. usort($person, compare2); 
  11. echo "按第三个元素正向排序:"
  12. print_r($person);  
  13. 输出的结果如下: 
  14.  
  15.  按第三个元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

3.按每维的第三个元素升序排列,代码如下:

  1. function reverse_compare2($x$y) { 
  2.  if($x[2] == $t[2]) { 
  3.   return 0; 
  4.  } elseif ($x[2] < $y[2]) { 
  5.   return 1; //改变后即可反向 
  6.  } else { 
  7.   return -1; //改变后即可反向 
  8.  } 
  9.  
  10. usort($person, reverse_compare2); 
  11. echo "按第三个元素反向排序:"
  12. print_r($person);  
  13. //输出的结果如下:1 
  14. //按第三个元素反向排序: 
  15. Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

呵呵,是不是代码多了点,记下了以后方便查阅啊!

例代码如下:

  1. error_reporting(0); 
  2. /** 
  3. * @数字数组排序 可按从大到小或从小到大排序   
  4. */ 
  5. function sortArray($array$choice) { 
  6.     $values = array_values($array); // 建立一个数字索引的数组 
  7.     $ch = $choice==0 ? min:max; // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小 
  8.     do { 
  9.         $val = $ch($values); // 找出最大或最小值 
  10.         $key = array_search($val,$values); // 取得最大值的键名 
  11.         $result[$key] = $val// 将最大值存入新数组 
  12.         unset($values[$key]); 
  13.     } while (count($values) > 0); 
  14.     return $result
  15. $array = array(100, 1000, 1, 10000); 
  16. //$array = sortArray($array, 0); 
  17. $array = sortArray($array, 1); 
  18. foreach($array as $a) { 
  19.     echo "$a "
  20. ?> 

推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
author-avatar
沙胆建筑_829
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有