1、 第三章(第三章(项目三项目三)PHP 数组数组学习指导学习指导 在 PHP 中,数组是由多个元素组成的整体,每个元素又包含键名和值两个部分。键名就是数组元素下标,而下标可以是整数或字符串。若使用浮点数或只包含整数的字符串作为下标,则会自动转换为整数。数组元素的值可以是整数、浮点数、字符串、另一个数组或者对象。在数组元素中保存一个数组,则可构成二维数组。如果用语句创建一个一维数组,代码可以是这样的。$a=array(“one”,”two”,”three”);这个图说明了上面这个数组 a 在内存中的存放形式 数组变量 a 中存储着指向数组元素的指针,称为数组指针。数组中有 3 个元素,下标为0
2、即键名为 0 的元素值是“one”,下标为 1 即键名为 1 的元素值是“two”,下标为 2 即键名为 2 的元素值是“three”。注意,没有定义的话,数组的下标是从 0 开始的。一、一、创建数组。创建数组。1直接赋值创建数组 PHP 与其他语言有所不同,它允许通过直接给数组元素赋值来创建数组,基本格式是这样的。$数组名下标=表达式;例如:$a1=”MyPHP”;如果数组中已存在相同下标的元素,则该元素的值被修改;否则在数组末尾添加一个新的数组元素。在给数组元素赋值时,可省略下标。例如:$a=”OK”;在省略下标时,PHP总是在数组末尾添加新的数组元素,数组下标为最大键值加1。若数组中还没
3、有元素或现有元素键值均为字符串,则新添加的数组元素下标为 0。请看这个实例:程序代码如下 程序第 1 行是 PHP 代码开始标记,第 2 行,创建了数组 a,且第一个元素即下标为0 的元素值为字符串“one”;第 3 行,定义数组 a 的第二个元素即下标为 1 的元素值为字符串“two”;第4行,定义了数组a的第三个元素即下标为2的元素值为字符串“three”;第 5 行通过 var_dump 函数输出数组 a 的信息。第 6 行,重新定义数组 a 中下标为 1 的元素值为数值 200,这个元素的值原来为字符串“two”;第 7 行,为数组 a 添加了一个新元素即下标为 3 的元素值为浮点数
4、2.5,此时数组中有 4 个元素了。然后下面这一行输出修改后的数组值。这段代码在 IE 浏览器中的显示结果如图所示。从图中可以看出 var_dump()函数输出了数组变量的数据类型,包含有数组元素个数,以及每个数组元素的数据及其类型。2使用 array()函数创建数组 应用 array()函数创建数组的语法形式如下:$var=array(key1=value1,key2=value2,key3=value3,);在创建数组时,如果省略了键名,则默认键名依次为 0、1、2 若只为个别元素指定了字符串作为键名,则剩余未指定键名的数组元素的键名仍依次为 0、1、2 若用整数作为数组元素键名,则其后数
5、组元素默认键名从该整数起依次 加 1 例如下面这行语句$a=array(“one”,5=”two”,”three”);a 数组中第一个元素的下标或键名为 0,值为字符串“one”,第二个元素的下标或键名定义为 5,其值为字符串“two”,第三个元素的下标或键名就是 6 了,因为前一个下标是 5,这一个下标没有定义就是 5+1 等于 6。比较特殊的情况是指定的键名比前面元素的键名小,则其后元素的默认键名为前面值最大的键名加 1。例如下面这行语句$a=array(7=one,3=two,three);这样第三个元素的下标或键名应该是 8 不是 4。3创建创建二二维数组维数组 当一个一维数组保存到另
6、一个数组的元素中即可创建二维数组,通过类似操作可进一步创建多维数组。请看这个语句:$arr11=array(“PHP 从入门到精通”,”PHP 典型模块”,”PHP 标准教程”);定义了数组 arr1,其下标或键名为 1 的数组元素的值又是一个数组,因此数组 arr1 是一个二维数组。其中 arr110=“PHP 从入门到精通”arr111=“PHP 典型模块”arr112=“PHP 标准教程”再看一个二维数组的定义,请看下面这段代码$book_str=array(“PHP 类图书”=array(“PHP 从入门到精通”,”PHP 典型模块”,”PHP 标准教程”),“JAVA 类图书”=ar
7、ray(“a”=“JAVA 范例手册”,”b”=”JAVA WEB 范例宝典”),“ASP类图书”=array(“ASP从入门到精通”,2=”ASP范例宝典”,”ASP典型模块”);变量 book_str 是一个二维数组。4创建数值或字符数组 使用 range()函数可以返回包含指定范围内数值或字符的数组,其基本格式是这样的:range($start,$end,$step);其中参数$start 和$end 为整数、浮点数或字符,用于指定参数范围。$step 指定返回的数组元素之间的增量,默认为 1。若$start 大于$end,则按从小到大的顺序返回。请看下面这段代码:?php$a=rang
8、e(0,5);print_r($a);echo;$a=range(10,5);print_r($a);echo;$a=range(0,8,2);print_r($a);?第 2 行使用 range 函数创建了一个值的范围在 0 到 5 之间的数组,即 a0=0,a1=1,一直到 a5=5;然后输出数组元素并换行,第 3 行使用 range 函数创建了一个值的范围在 10 到 5 之间的数组,即 a0=10,a1=9,一直到 a5=5;然后输出数组元素并换行;第 4 行使用 range 函数创建了一个值的范围在 0 到 8 之间的数组,但增量 step 为 2,即a0=0,a1=2,a2=4,a
9、3=6,a4=8;然后输出数组。运行结果如图所示。二、二、使用数组使用数组 1使用使用 each()函数操作数组函数操作数组 each()函数返回一个包含数组当前元素键/值对应的数组,并将数组指针指向下一个数组元素。each()函数返回的数组包含 4 个元素,元素下标依次为 1、value、0 和 key。1 和 value对应元素中为原数组元素的值,0 和 key 对应元素中为原数组元素的下标。如果数组指针指向了数组末尾(最后一个元素之后),则返回 FALSE。请看下面这个例题,使用 each()函数遍历数组,代码如下:Mike,sex=男,age=30);/创建数组 var_dump($a
10、);echo;while($b=each($a)var_dump($b);echo;第 2 行创建了数组 a,第 3、4 行输出数组 a 的信息并换行。第 5 至 9 行,开始 while循环,利用赋值表达式“$b=each($a)”作为 while 循环条件。在$a 的数组指针指向数组元素时,赋值表达式的值与变量$b 相同是一个数组,该数组转换为布尔值 TRUE,所以执行 while 循环。在$a 的数组指针指向数组末尾时,each()函数返回 FALSE,while循环结束。这段代码在 IE 中的显示结果如图所示。2使用使用 list()函数操作数组函数操作数组 list()函数用于将数组
11、中各个元素的值赋值给指定的变量,其基本格式为 list(变量 1,变量 2,变量 3,)=数组变量;list()函数依次将下标为 0、1、2的数组元素赋值为指定的变量。如果数组中的元素没有这些下标,变量值为 NULL,PHP 会产生一个 Notice 错误信息。例如,使用 list()函数操作数组的一段代码如下。?php$a=array(one,two,three);print_r($a);/输出数组信息 echo;list($x,$y,$z)=$a;echo$x=$x $y=$y $z=$z 其中第 2 行创建了数组 a,第
12、3、4 行输出数组 a 的信息并换行。第 5 行将数组 a 中下标为 0、1、2 的元素值依次赋值给变量 x,y 和 z 下面一行使用 each 语句输出变量 x,y 和 z 的值 代码在 IE 浏览器中的运行结果如图所示.我们再来看这一段代码:three,four);print_r($a);/输出数组信息 list($x,$y,$z)=$a;/将下标为 0、1、2 的元素值依次赋值给变量 echo list($x,$y,$z)=$a;/将下标为 0、1、2 的元素值依次赋值给变量;echo$x=$x $y=$y $z=$z 其
13、中第2行创建了数组a,下标为0的元素值为”one”,下标为1的元素值为”two”,下标为 3 的元素值为”three”,下标为 4 的元素值为”four”,注意缺少下标为 2 的元素.第 3 行输出数组 a 的信息并换行。第 4 行将数组 a 中下标为 0、1、2 的元素值依次赋值给变量 x,y 和 z 下面两行使用 each 语句输出变量 x,y 和 z 的值 代码在 IE 浏览器中的运行结果如图所示.这段代码在IE中的显示结果如图所示。因为缺少下标为2的元素值,所以出现Notice信息.3使用数组指针操作数组使用数组指针操作数组 PHP 提供了数组指针相关的函数来操作数组,下面分别进行介绍
14、。例如 使用数组指针操作数组,代码如下。?php$a=array(one,two,three);print_r($a);/输出数组信息 echo 依次输出数组元素:;do echo$a,key($a),=,current($a), while(next($a);/数组指针指向数组末尾时,循环结束 /前面循环结束后,数组指针指向数组末尾 echo 执行 reset()函数后的当前元素:;reset($a);echo$a,key($a),=,current($a);echo 反序输出数组元素:;end($a);/使数组指针指向最后一个元素 do echo$a,key($a),
15、=,current($a), while(prev($a);上面代码在 IE 中的显示结果如图所示 三、数组运算和三、数组运算和操作函数。操作函数。1数组运算 PHP 允许数组参与一些运算,下面分别对常见的运算进行介绍。(1)数组合并:如$a+$b,表示将数组$b 中下标未出现在数组$a 中的元素添加到数组$a 末尾。(2)相等比较:如$a=$b,表示若数组$a 和$b 包含相同的键/值对(顺序可以不同),则结果为 TRUE,否则为 FALSE。(3)全等比较:如$a=$b,表示若数组$a 和$b 包含相同的键/值对(顺序、数据类型均相同),则结果为 TRUE,否则为 F
16、ALSE。(3)不等比较:如$a!=$b,表示若数组$a 不等于数组$b,则结果为 TRUE,否则为 FALSE。(4)不等比较:如$a$b,表示若数组$a 不等于数组$b,则结果为 TRUE,否则为 FALSE。(5)不全等比较:如$a!=$b,表示若数组$a 不全等于数组$b,则结果为 TRUE,否则为 FALSE。请看下面这段代码及其运行结果 2数组键数组键/值操作函数值操作函数 PHP 中数组的每个元素均为一个键/值对,键/值操作函数可以使用数组元素的键或值生成新的数组。下面分别对 PHP 键值操作函数进行介绍。(1)array_keys($a,$value,TRUE/FALSE):若只指定数组变量$a,则返回包含数组全部键名的数组,数组下标为 0、1、2。若指定了$value 参数,则只返回值等于$value的元素的键名。第 3 个参数默认为 FALSE,若设置为 TRUE,则进行全等比较。(2)array_values($a):返回数组$a 全部值组成的数组,数组下标为 0、1、2。(3)in_array($value,$a,TRUE/FALSE):若数组$a 中存在值等于