零点起飞学PHP之数组.pptx

上传人:max****ui 文档编号:20879201 上传时间:2021-04-20 格式:PPTX 页数:61 大小:682KB
收藏 版权申诉 举报 下载
零点起飞学PHP之数组.pptx_第1页
第1页 / 共61页
零点起飞学PHP之数组.pptx_第2页
第2页 / 共61页
零点起飞学PHP之数组.pptx_第3页
第3页 / 共61页
资源描述:

《零点起飞学PHP之数组.pptx》由会员分享,可在线阅读,更多相关《零点起飞学PHP之数组.pptx(61页珍藏版)》请在装配图网上搜索。

1、第5章 数组数组是将多个数据集合在一起的一个形式。它在PHP中是非常强大的一种数据类型,可以用来存储多种类型的多个数据。本章将首先介绍数组的优势,然后循序渐进地从简单创建一个数组、修改数组中的数据到常用的遍历数组再到灵活操作数组中指针的形式来学习。从而让读者很好地掌握PHP的数组。 5.1 使用数组数组在一些方面有其独特的优势。本节将介绍数组使用方法的基础知识,以及关联数组和索引数组的使用和应用方面。从而让读者对如何正确使用数组有一个明确的了解。 5.1.1 使用数组的优势数组的优势在于可以集中处理大批量的数据,而不需要每次更换变量名。由于是集中处理数据,所以处理方式上有很多优化和改进。PHP

2、中提供了专门的数组运算符以及非常多的操作数组的函数,因此PHP中的数组使用可以非常灵活。当然灵活性的提高是建立在不同细节上的,因此我们就需要从细节讲起,让读者了解数组的每一个细节,然后根据需要来灵活操作数组。 5.1.1 使用数组的优势我们不妨来设想下面这个情景:如果要求你统计一个班级中成绩的平均分,那么我们必须要声明等于学生个数的变量来存储每个人的成绩,然后再将所有成绩相加后再取得平均分简略的代码可以写成如下的形式: 01 我们可以看到,这种形式需要声明很多变量来存储学生的成绩, 5.1.1 使用数组的优势而使用数组实现同样的功能,我们可以把程序改为如下所示的形式: 01 使用数组实现相同功

3、能的代码精简度是显而易见的,当然这里只是作为一个演示,读者此刻无需理解代码中使用的函数。 5.1.2 数组使用基础在上一小节中我们已经了解了数组所具备的优势,本节我们就来讲解使用数组的基础知识,主要包括定义数组、访问数组元素、添加/修改数组元素和删除数组元素的知识。 1.定义数组PHP中定义数组使用的是array结构,它的语法形式如下所示:array array (mixed values )这是定义数组的最基本形式,array的参数被称元素可以是0个或者多个不同类型的数据,每个参数为“索引=值”的键值对形式。如果索引被省略则由系统自动添加从0开始的整数索引,这种由系统指定索引的函数被称为索引

4、数组。数组中元素的个数被称为数组的长度,它会随着元素的增减而变化。下面就来定义一个数组:$arr=array(98,hello,67,A,85,NULL);上面的代码中$arr是数组的名称,用来保存定义的数组。该数组的长度为6。 2.访问数组元素访问数组中的元素是通过数组名指定索引来完成的,语法形式如下所示:数组名索引语法中的索引被放在方括号中,可以为变量、常量或者表达式。 2.访问数组元素【示例5-1】演示访问数组中的元素。从运行结果可以看到代码正确访问到了数组中的元素。我们还可以把一个变量作为数组的下标来访问数组的元素,形式如下所示:数组名变量名 2.访问数组元素【示例5-2】演示使用变量

5、作为数组下标来访问数组中的元素。从运行结果可以看到,我们可以采用这种方式来正确输出数组对应的元素。我们还可以将一个表达式作为数组的下标来访问数组的元素。【示例5-3】演示使用表达式作为数组下标来访问数组中的元素。以上代码中我们只使用了简单的示例来讲解,读者可以在实际使用时候融会贯通。 5.2 数组常用操作本节将要学习的是常用的数组操作,主要包括遍历、比较、合并、分割、排序和过滤数组元素。在学习这些知识之前我们首先需要认识三个函数count、print_r和var_dump,他们的原型如下所示:int count ( mixed $var , int $mode )bool print_r (

6、mixed $expression , bool $return )void var_dump ( mixed $expression , mixed $expression , $. )count函数用来计算数组中元素的个数或者对象中属性的个数,这里我们只用来计算数组元素的个数。print_r函数用来打印变量的详细信息。var_dump函数用来打印一个或多个表达式的结构信息,包括表达式的类型与值。 5.2.1 for循环遍历数组遍历数组即依次对数组中的每个元素进行访问且仅访问一次。我们知道默认数组的索引值是从0开始递增的,而且可以将变量作为索引来访问数组的元素。因此,我们完全可以使用循环递增

7、一个作为索引的变量来遍历一个数组。【示例5-4】演示使用for循环遍历输出一个数组中的元素。结合代码我们可以看到,通过简单的for循环语句遍历输出了数组的所有元素。 5.2.2 合并数组合并数组即为将两个或者多个数组合并为一个数组。合并数组有对应的运算符和多个函数可以完成,他们的区别就在于使用不同的规则对数组进行合并。 1.使用联合运算符合并数组PHP中有专门的数组运算符,用来合并数组的运算符称为联合运算符,它的符号与加法的符号相同。使用的形式如下:$arr = $arr1 + $arr2它会将右操作数中与左操作数中相同索引的元素去除后将剩余元素加在左操作数后而不会发生覆盖。【示例5-5】演示

8、数组联合运算符(+)的使用。从以上输出结果就可以看到,第一个数组中的元素并不会被覆盖。 2.使用系统函数合并数组基本的合并数组函数是array_merge函数,它可以将一个或者多个数组合并起来,将后一个数组的元素加在前一个数组的末尾。它的函数原型如下:array array_merge ( array $array1 , array $array2 , array $. )参数array1、array2为将要合并的数组,该函数的特点是可以一次合并多个数组。【示例5-6】演示使用array_merge函数合并多个数组。在上面的代码中分别使用array_merge函数合并两个和三个数组,并输出各个

9、数组的详细信息。这里需要读者了解的是该函数不会覆盖数组的元素。 5.2.3 获取数组的交集和差集获取数组的交集即为获取指定数组与其他数组中相同的元素;获取数组的差集即为获取指定数组与其他数组中不同的元素。在PHP中提供了获取交集和差集的多个函数,这里只讲解最主要的两个,他们的函数原型如下:array array_intersect ( array $array1 , array $array2 , array $ . ) /获取数组的交集array array_diff ( array $array1 , array $array2 , array $ . )/获取数组的差集这两个函数均可接受

10、多个参数,而且均会返回函数中参数array1与其他数组的交集(差集)。这里我们也可借用数学中的题目来学习这个函数。 5.2.3 获取数组的交集和差集例如有两个数组$arr1和$arr2用来保存两组参加知识竞赛学生的学号。前提是一个学生可以参加多项竞赛,那么我们就可以用以上函数来取得两项竞赛都参加的学生(交集),同样也可以取得一组中只参加一项竞赛的学生。【示例5-7】使用array_intersect函数和array_diff函数获取学生数组的交集和差集并输出。与数学中只能获取数值的交集与差集不同的是,PHP中可以使用以上两个函数来获取其他类型元素的交集和差集。【示例5-8】演示使用array_

11、intersect函数和array_diff函数获取其他类型数组的交集和差集。使用array_intersect函数和array_diff函数获取多个数组的交集和差集的使用与获取两个数组的交集和差集类似,这里就不再详细讲 解。 5.2.4 数值元素相关计算在使用数组的过程中很多时候需要对数组中的值进行求值运算。在本章开头的代码中,就使用了array_num来计算数组中元素的和。除了计算和的函数外还提供了array_product函数来计算数组中元素的乘积。本节我们就来介绍这两个系统函数。 1.array_sumarray_sum函数用来计算数组中所有值的和,它的函数原型如下:number ar

12、ray_sum ( array $array )参数array即为要求和的数组。注意:array_sum函数会将数字字符串转换为数值,将布尔值TRUE转换为1,而把其他不能转换为数值的通常转换为0来计算。【示例5-9】演示使用array_sum计算数组中元素的值。 2.array_productarray_product函数用来计算数组中所有值的乘积,它的函数原型如下:number array_product ( array $array )参数array即为要求乘积的数组。注意:与array_sum函数类似的,array_product函数会将数字字符串转换为数值,将布尔值TRUE转换为1,

13、而把其他不能转换为数值的通常转换为0来计算。因此对于含有不能转换为数值的元素的数组使用该函数是无实际意义的,因为任何值与0的乘积都为0。 2.array_product【示例5-10】演示使用array_product函数计算数组中元素的乘积。从运行结果我们可以看到代码第5行求取数组$arr2中元素的乘积得到的结果为0,这是因为在代码第3行中的数组元素“hello”会被转换为0导致的,因此我们实际应用中应该尽量避免这种情况。 5.3 增加与删除数组元素在PHP中,数组定义后,通常不是一成不变。在程序执行过程中,数组的元素可能被增加、删除和修改,这也是PHP的数组之所以非常强大的一个原因。下面就

14、来详细介绍这些知识。 5.3.1 添加/修改数组元素在有些情况下,数组中的元素并不是在定义数组时候就可以确定的,通常会在程序运行时动态地向数组中增加元素。为数组添加元素的语法类似于赋值,如下所示:数组名索引 = 值为数组增加元素需要使用未在数组中使用的索引或者不指定索引,不指定索引添加的数组索引同样由系统指定,指定规则为获取当前数组中最大整数索引值并在其基础上加1作为新元素的索引。在接下来的示例中将用到rand函数,它用来生成随机数,函数原型如下: int rand ( int $min , int $max ) 参数min和max分别用来指定生成的随机数的最小和最大范围。 5.3.1 添加/

15、修改数组元素【示例5-11】演示为数组添加元素。本段代码需要读者理解代码中指定索引和不指定索引的形式下元素索引的变化,当代码第9行为键指定为8的时候,第11行添加的元素的键就为会以8作为基础递增。修改数组中的元素只要访问到指定的元素,然后为其重新赋值即可,语法形式如下:数组名索引 = 值【示例5-12】演示修改数组中的元素。从输出结果我们可以明确看到数组被正确修改。 5.3.2 删除数组/数组中的元素当数组中的元素不再需要的时候我们就可以删除它。同样的当整个数组不再需要的时候我们同样可以删除整个数组。完成这这些操作可以使用的函数是unset,它用来释放指定的变量,它的函数原型如下:void u

16、nset ( mixed $var , mixed $var , $. )unset可以接受多个参数,参数var即为需要释放的变量,在本章学习中我们用来释放数组中的元素和数组。【示例5-13】演示使用unset函数释放数组元素和数组。从运行结果中我们可以看到指定的元素和数组都被删除。在第14行代码删除整个数组后,在第16行尝试访问数组会提示变量未定义。需要注意的是使用unset函数删除数组元素并不会影响数组的索引。 5.4 遍历数组遍历数组即依次对数组中的每个元素进行访问且仅访问一次。由于遍历是依次访问,而且数组的索引又是依次递增的。因此使用常规的循环都可以完成对数组的遍历。一些常用的操作也是

17、基于遍历来完成的,我们也在本节讲解。 5.4.1 排序数组排序在数组中是比较常用的操作。例如可以用来完成根据学生的成绩进行排名等操作。首先我们来使用for循环来对一个数组的元素进行排序。【示例5-14】演示使用for循环对一个数组中的元素进行从大到小的排序。从运行结果排序后的数组可以看出,我们完成了对数组的排序。由于排序的语句(代码中513行)是相对固定的,因此我们就可以将其封装为函数来使用。 5.4.1 排序数组【示例5-15】演示将示例5-14中完成排序的代码封装为函数并对多个数组进行排序。从运行结果我们可以看到,使用我们的自定义函数很轻松就完成了对三个数组的排序,这也再一次体现了函数的优

18、势。由于排序操作在数组中很常用,因此PHP提供了多个系统排序函数供我们使用,他们主要有sort、rsort和usort。这三个函数的原型如下所示: bool sort ( array 数组$arrc与数组$arrd同样相等但不全等,不全等是因为元素的类型不同。不等和不全等运算符的使用方法正好和他们相反,这里就不再赘述。 5.5.2 数组比较运算符【示例5-23】演示数组比较运算符的使用。读者可以从运行结果中对照比较各个数组以理解这些数组运算符。 5.5.3 使用foreach结构遍历数组前面我们已经使用for循环遍历过索引数组。我们知道关联数组的索引值通常是自定义的,因此通常不能通过for循环

19、来遍历。foreach是PHP中专门用来遍历数组的结构,它有两种使用形式,如下所示: foreach (array_expression as $value) statement foreach (array_expression as $key = $value) statement第一种形式中的参数array_expression表示要进行遍历的数组;参数$value用来接收当前元素的值。第二种形式是第一种形式的补充,除了使用参数$value来接收当前元素的值外,还使用参数$key来接收当前元素的键值。foreach结构的工作原理是每次循环 都会访问下一个数组元素。 5.5.3 使用for

20、each结构遍历数组数组指针是数组内部特有的指针,它初始会指向数组的第一个元素,可以通过数组指针操作函数来对指针进行操作。由于foreach控制的是数组的指针,因此可以遍历任意数组。 5.5.3 使用foreach结构遍历数组【示例5-24】演示使用foreach循环遍历数组。从运行结果我们可以看到,使用foreach可以轻松完成遍历一个索引数组。当然foreach不止可以用来输出数组元素,下面我们就来演示使用foreach修改数组中元素的值。由于foreach默认是使用传值赋值,因此我们可以以引用的形式来访问元素并修改其值。【示例5-25】演示使用foreach修改数组元素的值。从运行结果我

21、们可以看到,使用foreach成功修改了原数组的元素值。 5.5.4 使用指针控制函数遍历数组foreach结构就是通过控制数组指针来遍历一个数组的。除此之外,PHP中专门提供了多个指针控制函数,使用指针控制函数可以更加灵活地对数组进行操作。我们首先来介绍这些控制函数,然后再使用这些函数进行遍历数组以及进行其他的操作。 1.each()和list()each函数返回数组中当前的索引/值对并将数组指针向前移动一步,该函数的形式如下:array each ( array $stu02=array(65,89,95,76); $stu03=array(90,80,66,60); $stun=arra

22、y(90,95,65,100);我们可以想到如果一个班级有50个学生的话,我们就需要声明50个变量来存储他们的成绩,这就类似于本章开头的例子。那么自然就可以想到我们同样可以使用数组来保存这些数据,只不过这个数组的元素也是一些数组而已,我们可以改写为如下的形式: $stu=array(array(76,87,68,98), array(65,89,95,76), array(90,80,66,60), array(90,95,65,100);从上面的形式我们可以看到,省去了多个变量的声明,而且访问其中的成绩也与一维数组无异。 5.6.2 访问二维数组的元素访问二维数组的元素同样使用如下的形式:数

23、组名索引使用上面的形式访问到的通常会是一个数组。 5.6.2 访问二维数组的元素【示例5-31】演示访问二维数组的元素。从运行结果我们可以看到,代码成功访问到了数组中的元素,并输出其信息。 5.6.2 访问二维数组的元素由于使用“数组名索引”形式访问到的是一个数组,因此我们可以将其作为数组名来访问其中的元素,形式如下:数组名索引索引 5.6.2 访问二维数组的元素【示例5-32】以下代码演示访问二维数组中数组的元素。从运行结果中我们可以看到,使用“数组名索引索引”的形式正确访问到了指定的数组元素,这也是二维数组的重点知识。二维数组同样可以为关联数组即可以自定义索引名,这里就不做讲解。 5.6.

24、3 遍历二维数组二维数组通常使用foreach来遍历,对于规则的二维数组,也就是说数组的元素均为数组的二维数组,通常的形式如下:array(array(),array(),array(),array)这种形式的二维数组我们可以通过使用foreach嵌套来实现遍历数组元素。 5.6.3 遍历二维数组【示例5-33】以下代码演示使用foreach嵌套来遍历二维数组。从运行结果我们可以看出,我们遍历输出了数组的所有元素。但是这段代码不能用来遍历一个不规则的二维数组即数组中有的元素不为数组的二维数组,通常的形式如下:array(array(),$value,array()如果要遍历这种二维数组可以在f

25、oreach中添加判断来遍历,也可以通过递归来遍历,这里我们只介绍使用递归的方式。 5.6.3 遍历二维数组【示例5-34】以下代码演示使用递归遍历二维数组。从运行结果我们可以看到,使用我们的自定义函数成功遍历了不规则的二维数组。其他遍历的方法这里就不再详讲,读者可以根据自己情况来自己编写。 5.6.4 三维数组有了前面学习二维数组的基础,大部分读者一定能够推导出三维数组。三维数组即将多个二维数组作为元素的数组,通常的形式如下: array(array(array()三维数组可以存放更多的信息,例如一个学生有多个成绩,多个学生可以合成为一个班,多个班级可以合成为一个年级。那么我们就可以创建一个

26、如下形式的三维数组来保存这些信息: $grade=array(class1=array(stu1=array(yuwen=85,shuxue=95,yingyu=96), stu2=array(yuwen=76,shuxue=89,yingyu=99), stu3=array(yuwen=75,shuxue=99,yingyu=100), .), class2=array(stu1=array(yuwen=99,shuxue=100,yingyu=100), stu2=array(.), .), class3=array(.), . )三维数组元素的访问同二维数组类似,通过如下的形式即可访问:

27、数组名索引索引索引 5.6.4 三维数组【示例5-35】演示使用访问三维数组中的元素。三维数组的其他操作方法都同一维数组和二维数组类似,这里就不再详细讲解。 5.7 系统预定义数组系统预定义数组同系统预定义常量类似,即这些数组是由系统定义的,我们可以直接来访问而无需定义,PHP中常用的预定义数组如表所示。这些数组的使用方法同普通数组的使用方法相同,这里就不再详细讲解。预定义数组名说明$GLOBALS包含了全部变量的全局组合数组。变量的名字就是数组的键$_SERVER包含了诸如头信息、路径、以及脚本位置等信息的数组$_GET通过URL参数传递给当前脚本的变量的数组$_POST通过HTTP POS

28、T方法传递给当前脚本的变量的数组$_REQUEST默认情况下包含了$_GET,$_POST和$_COOKIE的数组 $_FILES通过HTTP POST方式上传到当前脚本的项目的数组$_SESSION当前脚本可用SESSION变量的数组$_COOKIE通过HTTP Cookies方式传递给当前脚本的变量的数组$_ENV通过环境方式传递给当前脚本的变量的数组 5.8 小结本章主要进行了数组部分的学习。PHP的数组是非常强大的,因此在本章尽可能详细地讲解到每一个知识点。数组中的索引数组是最常用的形式,因此花费了大篇的章节来讲解,这也是读者要掌握的主要部分。关联数组虽然可以使得数组看起来更加直观,但是在实际的使用过程中使用还是比较少的。本章的重点就在索引数组以及相关数组的操作,读者应该熟练掌握。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!