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

php数组定义与变量销毁和一维数组排序

本文章先是介绍关于php中的数组定义与数组的销毁,之后再用一个实例来说明一维数据的排序方法。PHP数组的定义,代码如下:$arrayarray(&39;o

本文章先是介绍关于php中的数组定义与数组的销毁,之后再用一个实例来说明一维数据的排序方法。

PHP数组的定义,代码如下:

  1. $array = array('one','two','three'); 
  2. var_dump($array); 

在本代码片段的第一行,定义了一个一维数组$array,第二行的时候我们格式化输出了这个数组,结果是这样的:

  1. array(3) { 
  2. [0]=> 
  3. string(3) "one" 
  4. [1]=> 
  5. string(3) "two" 
  6. [2]=> 
  7. string(5) "three" 

现在兄弟解释一下这个输出结果,首先这个数组的输出结果的第一行,array(3)告诉我们这是个有三个元素的数组,首先0号元素是一个长度为3的字符串(string(3))…篇幅关系剩下两个就不说了吧,吼吼……,这说明什么呢?这说明在PHP中如果我们不为数组指定下标的话,那么他就自己自作主张的从零开始给我们弄一个下标出来——也就是PHP数组中的键名;再看看下边的例子:

  1. $array = array('one',”hello”=>'two','three'); 
  2. var_dump($array); 

这一次我们定义数组的时候,为第二个元素指定了下标(从此以后,在本文中就叫做键名了,下标有点含糊不清!),第二个元素指定了键名(hello),咱们再看看输出结果,代码如下:

  1. array(3) { 
  2. [0]=> 
  3. string(3) "one" 
  4. ["hello"]=> 
  5. string(3) "two" 
  6. [1]=> 
  7. string(5) "three" 

我想你也像我一样看到了一个很智能的现象,第一个元素的键名还是0——这个我们可以理解,因为我们没有指定,而PHP数组必须要有一个键名,PHP就自作主张从零开始创立了一个键名;第二个元素的时候,我们指定了键名,PHP就尊重我们的意见用了这个键名;复杂的事情在第三个元素,第三个元素,看起来也很简单,我们没有指定键名,PHP自动的把最大整数键名加上1,作为了键名。但是大家想过没有,如果我们把第一个元素的键名修改为“-5”,第二个元素键名不变,结果会是什么呢?我们拭目以待,代码如下:

  1. $array = array(-5=>'one',"hello"=>'two','three'); 
  2. var_dump($array); 

如果你想当然的认为,第三个元素的键名应该是-4,那么我告诉你在PHP4.3.0之前这个想法是对的,但是之后就错了,现在也就是PHP4.3.0之后的版本你将看到如下结果:

  1. array(3) { 
  2. [-5]=> 
  3. string(3) "one" 
  4. ["hello"]=> 
  5. string(3) "two" 
  6. [0]=> 
  7. string(5) "three" 

是的第三个元素是从0开始的,也就是不管你的负数有多小,下一个元素要是让PHP来定义键名的话,那么他就是从0开始——记住这个地方说的是,在现有的键名中如果最大的依然是个负数,不管负数有多小,PHP也是从零开始下一个键名。

PHP数组的销毁很简单,像销毁其他变量一样。

销毁整个数组:unset($array)

销毁数组中的一个元素:unset($array[-5])

不管在现实生活中还是程序世界里,顺序总是很重要——真不敢想象一个没有顺序的世界会什么样子!PHP数组也不例外。PHP提供了四组针对PHP数组进行排序的函数,前三种都是针对一维数组的,我们先说这三种,第四种对多维数组的排序在下一篇文章中说,那个有点复杂。

第一组:sort 和 rsort,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引,看一下例程,代码如下:

  1. $a = array("a"=>1,2); 
  2. sort($a); 
  3. var_dump($a); 
  4. rsort($a); 
  5. var_dump($a); 
  6. ?> 

看一下第一个输出结果,第一个输出:

  1. array(2) { 
  2.   [0]=> 
  3.   int(1) 
  4.   [1]=> 
  5.   int(2) 

第二个输出:

  1. array(2) { 
  2.   [0]=> 
  3.   int(5) 
  4.   [1]=> 
  5.   int(4) 

发现没有我们原来定义的索引a哪里去了?哪里去了?可以肯定的说是被他们无情的删除了,你要是对原来的索引关系并不在意的话,可以使用他们!

第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下,看运行结果:

  1. array(2) { 
  2.   ["a"]=> 
  3.   int(1) 
  4.   [0]=> 
  5.   int(2) 
  6. array(2) { 
  7.   [0]=> 
  8.   int(2) 
  9.   ["a"]=> 
  10.   int(1) 

这个一看就明白的,不用说了吧!

第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的,大家可以把上例的函数替换成这两个,看看具体运行结果,这里也不说了,不然这个文章写的就太长了,怕有些兄弟没有耐心看到本文的重点,虽然重点就在下边!

通过自定义函数对PHP数组进行排序,有三个函数分别是:

uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。

uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。

usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。

这个地方当然需要一个例子,首先顶一个函数,这个函数需要接受两个参数,并且返回值是一定的,第一个参数等于第二个参数的时候返回0,小于的时候返回-1,大于返回1,代码如下:

  1. function cmp($a,$b){ 
  2.  $a+=1; 
  3.  $b+=3;//改变这些值之后进行比较 
  4.  
  5.  if($a==$breturn 0; 
  6.  return ($a<$b)?-1:1; 
  7.  
  8. $a =array(1,4,3,5); 
  9. uasort($a,&#39;cmp&#39;); 
  10. var_dump($a); 

输出结果:

  1. array(4) { 
  2.   [0]=> 
  3.   int(1) 
  4.   [3]=> 
  5.   int(5) 
  6.   [1]=> 
  7.   int(4) 
  8.   [2]=> 
  9.   int(3) 

呵呵……是不是比不排序还乱呢?我们这里只是演示了使用的方法而已,具体你用到的时候自己搞吧!你要是不对这些数值进行操作之后再比较,例如我们这里:

$a+=1;$b+=3;//改变这些值之后进行比较

在PHP手册中,一共定义了74个数组函数,涵盖了PHP数组的定义,赋值,排序,数值操作,比较,以及对数组的键名,键值反转……等等我们几乎能够想到的所有功能。


推荐阅读
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 本文详细介绍了如何在不同操作系统和设备上设置和配置网络连接的IP地址,涵盖静态和动态IP地址的设置方法。同时,提供了关于路由器和机顶盒等设备的IP配置指南。 ... [详细]
  • 本文对宋代词人朱雍的《迷神引》进行翻译和赏析,深入探讨其词作的艺术特色与情感表达。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本文介绍如何使用PHP在WordPress中根据分类类别ID或名称获取所有相关文章,提供详细的方法和代码示例。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 小编给大家分享一下如何移除URL中的index.php,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • 本文详细介绍了如何在PHP中删除数组中的指定元素、第一个元素和最后一个元素,并提供了具体的代码示例和相关函数的使用说明。 ... [详细]
  • 本文详细解析了汉字‘犐’的基本字义及其在古代文献中的应用,旨在为读者提供全面而深入的理解。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 澄清对 IN 语句索引使用常见误解
    本文旨在纠正关于 MySQL 中 IN 语句是否使用索引的常见误解。许多人认为 IN 语句的索引使用与字符串长度有关,实际上,影响因素更为复杂,包括数据分布和 MySQL 版本等因素。 ... [详细]
author-avatar
o0風無痕0o
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有