《轻松学PHP之数组.pptx》由会员分享,可在线阅读,更多相关《轻松学PHP之数组.pptx(47页珍藏版)》请在三一办公上搜索。
1、第5章 数组,数组在PHP中广泛应用。它可以用于存储相关的一组数据。这样,使用一个数组变量就可以表示很多数据,而避免声明和使用大量的变量。本章将详细详解PHP中数组的类型、数组的遍历和数组的相关处理函数。,5.1 数组的概述,PHP中的数组是比较自由和强大的一种数据类型,由于PHP的弱类型性质,导致它可以存储的内容可以是多种类型。因而我们就不必担心数据类型的问题。PHP中数组的长度是可以动态增长的,这在一些强类型语言中是做不到的,就是这些自由的特性,造就了数组的强大。下面我们就来具体学习他们。,5.1.1 为什么使用数组,数组的本质就是储存、管理和操作一组变量。前面我们学习过变量,数组储存的就
2、是一系列的变量值。$li_xm=小李;$li_nl=25;$li_xb=女;$li_gs=B公司;$li_dy=;这里我们就用一个数组来存储小李的信息。如下所示:$xiaoli=array(小李,25,女,B公司,)上面的代码就是使用小李的信息创建的数组。,索引数组,在本节的开头我们就使用如下所示的数组存储了小李的信息:$xiaoli=array(小李,25,女,B公司,)小李的信息是存到数组里了,可是我们怎么从数组取出这些元素呢?这里我们就要知道数组是使用索引来对应每一个元素。图5.3所示就是它们的对应关系。,索引数组,关联数组,关联数组就是来解决读者这种困惑的。关联数组是使用字符串作为索引
3、的数组,如图5.4所示即为关联数组的存储方式。这种使用字符串作为元素索引的数组称为关联数组,它的索引不再数字了,而是可以使用有意义的字符串作为元素的索引。,5.2 初始化一个数组,在前面的小节中,我们已经充分了解了数组的各种概念,及其保存多数据的优势。数组通过声明才可以被创建。PHP中数组的初始化有两种方式。一种是使用array()初始化,另一种是直接赋值初始化。下面我们就来分别学习他们。,5.2.1 直接赋值初始化索引数组,我们首先来看直接赋值声明的语法:直接赋值声明数组的本质就是给一个数组元素赋值的过程。下面我们就以小李的信息来定义一个数组。代码如下所示:$xiaoli0=小李;$xiao
4、li1=女;$xiaoli2=25;$xiaoli3=B公司;$xiaoli4=;,5.2.2 直接赋值初始化数组的特性,直接赋值值初始化一个索引数组是非常灵活的,它有一些重要的特性需要读者熟练掌握。这里我们需要使用一个函数print_r(),它会输出数组的元素和对应的索引。,1.如果在直接赋值声明数组时候不定义索引值,系统会默认从下标0开始依次递增,(1)演示定义下标值直接赋值声明数组,数组下标值会默认从0开始递增。,2.如果在声明的时候索引被指定了一个值,那么后面的元素下标会递增,(1)演示声明数组时如果先指定一个值,后面的元素索引会递增。,3.如果在声明的时候索引被定义了一个值,在递增的
5、过程中碰到了较小的下标,那么递增会跳过这个下标,在后面继续递增,(1)演示索引在递增中如果碰到了较小的索引,则跳过这个元素继续递增。,4.如果在声明的时候索引被定义了一个值,在递增的过程中遇到了较大的下标,那么程序会以这个下标为开始递增,(1)演示下标在递增中如果碰到了较大的下标,会以这个新下标开始递增。,5.如果在声明的时候索引被定义了一个值,在递增的过程中碰到了相等的下标,那么程序会对这个索引对应的元素重新赋值,(1)演示在递增过程中遇到相等的下标,那么这个索引会被重新赋值。,5.2.3 直接赋值初始化关联数组,前面我们直接赋值初始化的都是索引数组,我们知道数组还有一种关联数组。直接赋值初
6、始化关联数组就没有索引数组的那么多特性了。我们来看以联系人信息中小王的资料来以直接赋值的方式声明一个关联数组。$xiaowangxm=小王;$xiaowangxb=男;$xiaowangnl=23;$xiaowanggs=C公司;$xiaowangdy=;(1)输出数组$xiaowang中元素的内容。(2)如果不写下标,系统默认会从下标0开始。并且通过输出验证。,使用array()初始化数组,array()通常接受形如$key=$value的若干个参数对。它的语法式如图所示。,使用array()初始化数组,使用array()初始化数组需要了解:如果不使用索引$key,则数组会被默认为索引数组,
7、下标从0递增。就像这样的形式,如图所示:,使用array()初始化数组,(1)定义一个数组$xiaozhou。并且输出数组的信息。(2)定义一个数组$xiaohu。并输出元素的值。,5.3 数组的类型,数组也是有不同的类型的,我们在前面的学习中使用的都是一维数组,一维数组是最常用也是最简单的数组。其他类型的数组统称为多维数组,有二维数组、三维数组以及n维数组,其实三维数组就已经比较少用到了,常用的就是一维数组和二维数组。,5.3.1 一维数组,一维数组可以简单地理解为数组的元素是常量的数组。我们前面用到的数组都是一维数组。它的形式如图所示。,5.3.1 一维数组,在PHP中我们使用变量数组名加
8、索引值来找到对应的元素。语法如图所示。,5.3.1 一维数组,(1)使用索引取得数组$xiaoli中的各个元素并输出。(2)输出关联数组$xiaoli内的所有元素。(3)使用变量作为数组的索引访问数组的元素。,5.3.2 多维数组,1.二维数组2.三维数组,1.二维数组,二维数组就是把若干个一维数组作为数组的元素,组成的新数组就是一个二维数组。如图所示就是二维数组的语法形式。,1.二维数组,(1)输出二维数组$arr的详细信息。(2)输出二维数组$arr中的元素。(3)从一个二维数组中输出一个元素。,2.三维数组,由若干个二维数组做为一个数组的元素,那么就构成了一个三维数组,如图所示就是一个三
9、维数组:,2.三维数组,当然我们依然可以使用直接赋值的方式来创建一个三维数组,如下所示:$arr00=array(1,2,3);/给二维数组赋一个数组构成三维数组$arr000=hello;/直接给三维数组元素赋值$arr001=你好;,5.4 数组的遍历,在前面的学习中,我们看到输出一个数组的全部元素,我们只能按索引一个一个输出。这个还是数组元素比较少的时候。如果一个数组的元素非常多。那么读者肯定就头疼了。而计算机最擅长的就是按一定条件做重复的事情。说到这里,读者肯定醒悟了,我们开始要讲的就是使用循环的方式输出数组。当然后面还会使用PHP的一些函数来做同样的事情。这种依次访问一次数组中的元素
10、的行为就叫做数组的遍历。,5.4.1 使用for循环遍历数组,for循环遍历数组针对的是索引数组,在前面我们就知道了数组可以使用使用变量作为索引来访问数组的中的元素。而索引数组中元素的索引是以数字递增的,这样我们就可以循环递增一个变量。把它作为数组的索引就可以遍历数组了。(1)使用for循环遍历一个数组。(2)使用count函数计算多个数组的元素个数。(3)使用count函数计算出数组长度,并且使用for循环遍历数组。(4)使用count函数计算一个动态增长的数组中元素的个数。(5)尝试输出数组中元素的值。,5.4.2 使用foreach遍历数组,PHP中可以使用foreach来遍历数组。这是
11、一个比较简单的遍历数组的方法。有两种语法形式,如图所示:,5.4.2 使用foreach遍历数组,(1)使用foreach输出数组$arr的索引值和对应的元素值。(2)使用foreach使数组中元素的值增大2倍。(3)使用foreach遍历输出二维数组$arr的每个元素的值。(4)使用foreach遍历输出二维索引数组$arr。,5.4.3 使用each()、list()和while循环联合遍历数组,前面我们使用foreacho可以很简便地遍历一个数组,下面我们要学习的是使用each()、list()和while循环联合遍历数组的方法。就如我们看到的我们使用的这种方法用多种函数和结构。遍历相对
12、复杂,但是更加多了的是灵活性的提高。,1.each函数,each函数的定义是:接受一个数组遍历名参数,返回数组中当前指针位置的键值对并向后移动数组指针。键值对被返回为四个元素的数组,键名为0,1,key和value。元素0和key包含有数组元素的键名,1和value 包含有数据。如果内部指针越过了数组的末端,则each()返回FALSE。我们先看它的语法,如图所示。,1.each函数,(1)使用print_r函数输出each函数的返回值。(2)使用each函数输出数组$arr的元素键值对。,2.list函数,list的定义是:把数组中的值赋给一些变量。虽然很简短的一个定义,但是看起来却没有那么
13、容易理解。其实list函数的作用是使用一次操作,给多个变量赋值。list函数可以接受多个参数。然后使用数组给这些参数赋对应的值。它的语法如图所示。,2.list函数,(1)使用数组$arr给list函数赋值。(2)使用each函数和list函数遍历输出数组元素。,3.while循环和each()联合使用遍历数组,通过前面的学习我们已经充分认识了each,它会返回的数组是两对键值对,一对可以看做是索引数组,一对可以看做是关联数组。前面我们已经使用数字索引的元素完成了遍历,下面我们就使用字符串索引的函数结合while循环来完成遍历数组。(1)使用each返回的数组中以字符串为索引的元素联合whil
14、e循环完成对数组$arr的遍历。,4.while循环和each()、list()联合遍历数组,(1)使用while循环和each()、list()联合遍历数组。,5.5 数组内部指针控制函数,数组的内部指针是数组内部的组织机制,它可以指向数组中任意一个元素。数组内部指针默认是指向数组的第一个元素的。通过控制指针的移动,可以访问到数组中的任意一个元素。数组内部指针的控制,需要使用以下函数:current()返回当前元素的内容。current()并不移动指针。如果内部指针指向超出了元素列表的末端,current()返回FALSE。key()返回当前元素的索引值next()返回数组内部指针指向的下一
15、个元素的内容,当没有更多元素时返回FALSE。需要注意的是如果数组包含空的元素,或者元素的值是 0 则本函数碰到这些元素也返回 FALSE。因此next()不可用做循环的执行判断语句。next()和current()的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。prev()返回数组内部指针指向的前一个元素的值,或当没有更多元素时返回FALSE。需呀注意的是如果数组包含空的元素,或者元素的值是 0 则本函数碰到这些元素也返回FALSE。end()将数组的内部指针移动到最后一个元素并返回其值。reset()将数组的内部
16、指针倒回到第一个元素并返回第一个数组元素的值,如果数组为空则返回FALSE。,5.5 数组内部指针控制函数,(1)以数组$arr作为数组内部指针控制函数的参数。并输出他们的返回值。,5.6 PHP中的预定义数组,在学习函数的时候,我们在学习了自定义函数后,还学习了PHP的系统函数。我们前面所学的数组的内容,就是自定义的数组,PHP也提供了一些已经由系统定义好的数组。这些数组在全局范围内自动生效。他们包含了来自web服务器、客户端、运行环境和用户输入等数据。表列出了PHP常用的预定义数组及其说明。,5.6 PHP中的预定义数组,这里我们只列出了一些常用的预定义数组,他们的使用方法和普通数组的使用
17、方法是一样的。可以通过访问他们不同的元素取得不同的信息。但是以我们现在的知识还不足以能很好的理解这些内容,因此详细的讲解会在我们知识达到一定深度的时候进行,这里读者只要知道有这么些预定数组即可。,5.7 数组的相关处理函数,从前面的学习中,我们可以感觉到PHP的数组比较复杂,但是很灵活。数组是在PHP开发中非常重要的一种数据类型之一。在PHP中系统对数组的支持也是显而易见的。PHP提供了近百个操作数组的系统函数,他们可以对数组进行排序、替换、计算等许多的操作。当然我们前面已经学习过了函数,我们可以自定义一些数组处理的函数。这里我们只讲解少数的几个函数。我们只要掌握了他们的使用方法就可以。,1.
18、array_sum(),array_sum()将数组中的所有值的和以整数或浮点数的结果返回。它的形式如下。array_sum($array)它接受一个数组参数。(1)使用array_sum函数计算数组中所有值的和。,2.in_array(),in_array()检查数组中是否存在某个值。它的形式如下:in_array($needle,$haystack,$strict)它可以接受三个参数,第三个参数是可选的,第一个参数表示要在数组中搜索的值。第二个参数表示要搜索的数组。第三个参数是可选参数,它是一个布尔值。TRUE则表示要搜索的值区分大小写。如果找到则返回TRUE。否则返回FALSE。(1)使
19、用in_array()函数在数组$arr中是否存在字母Z。,3.array_count_values(),array_count_values()函数用于统计数组中所有值出现的次数。并返回一个数组。它只有一个参数,可以接受一个数组。它的形式如下:array_count_values($array)(1)使用array_count_value()函数统计数组$arr中每个值出现的次数。,5.8 小结,本章中我们学习了PHP的数组,体会到了PHP数组的灵活和强大的特性。本章中除了对数组本身的学习之外。也比较多地运用到了我们前面所学的知识,比在数组的遍历时候就运用到了如循环结构和分支结构等知识。在后来的PHP处理函数的学习中我们只学习了很少的几个函数。这个已经足够了,本身那些都是一些函数,只不过是有针对性的函数,因此不必做大篇幅的讲解。要学会的是知识的活学活用。,