关联课件:8子项目八 -数组函数(点击在线预览)
8.3.2 数 组 函 数
8.3.2.1 数组函数概述
数组是编程中的重要元素,在PHP中也不例外。在PHP语法部分已经介绍了数组的定义和使用,对数组有了一定了解。PHP中还为用户提供了一系列用来操作数组的函数,这些函数为标准函数,可以直接使用。表8-1列出了PHP5.1.6提供的数组函数。
看到这个表读者可能大吃一惊,PHP开发者竟然提供了如此丰富的函数!实际上,PHP提供的数组操作函数多达110多个,表8-1中并未列出全部函数,而只列出了其中较为常用的函数。
即使是表中列出的函数,这里也不可能一一讲解其使用方法。下面将着重讲解其中最为常用的几个,其他函数读者可以参考PHP手册来学习其使用方法。有些读者可能会被这密密麻麻的函数吓倒,认为学习PHP很难。实际上每一个学习者都不可能把这所有的函数都记住。除了少量的极为常用函数需要记住以外,其他大多数函数都没有必要去死记硬背。一种比较好的学习方法是将所有函数浏览一遍,并大体记住其功能。等到编程中遇到类似问题时,可以通过查找函数手册找到函数的使用方法,然后应用到程序中。实际上很多编程语言的函数库、类库都很庞大,不可能短时间内全部掌握,都有一个逐渐熟悉、积累的过程。
下面以几个函数为例来说明数组处理函数的使用。
8.3.2.2 array()函数
array()函数用来建立一个新数组。函数的参数可以是一个混合类型。下面看一个例子。
1: <!--文件8-1.php:用array()函数建立数组-->
2: <HTML>
3: <HEAD>
4: <TITLE>array函数的使用</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $arr1=array(0,1,2,3,4);
9: $arr2=array("a"=>0,"b"=>1,"c"=>2,"d"=>3,"e"=>4);
10: echo "$arr1[0]=".$arr1[0];
11: echo "<br>";
12: echo "$arr2["a"]=".$arr2["a"];
13: ?>
14: </body>
15: </HTML>
程序8-1.php中首先用array()函数定义了拥有5个元素的数组$arr1,并且每个元素分别赋值0,1,2,3,4。然后定义了同样5个元素的数组$arr2,并分别赋值0,1,2,3,4。两个数组的不同是第一个数组用了默认的数字作为下标,第二个数组用了自定义的字符作为下标。因此最后输出数组元素时也使用了各自对应的下标。程序的运行结果如图8-3所示。
图8-3 程序8-1.php的运行结果
8.3.2.3 count()函数
count()函数可以用来统计一个数组中元素的个数,在循环遍历一个未知长度的数组时非常有用。看下面的例子。
1: <!--文件8-2.php:Count函数的使用-->
2: <HTML>
3: <HEAD>
4: <TITLE>Count函数的使用</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $arr1=array(0,1,2,3,4);
9: Echo "数组$arr1中元素的个数为:".count($arr1);
10: ?>
11: </BODY>
12: <HTML>
程序运行后将输出:“数组$arr1中元素个数为:5”。
8.3.2.4 each()函数
each()函数可以返回一个数组中当前元素的键和值,并将数组指针向前移动一步,常常被用在循环中来遍历一个数组。
1: <!--文件8-3.php:each函数的使用-->
2: <HTML>
3: <HEAD>
4: <TITLE>each函数的使用</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $arr = array("name"=>"Bob","age"=>20,"sex"=>"male", "postcode"= > "100000");
9: for($i=0;$i<count($arr);$i ){
10: $keyAndValue=Each($arr);
11: echo $keyAndValue["key"]."=>".$keyAndValue["value"];
12: echo "<br>";
13: }
14: ?>
15: </BODY>
16: </HTML>
程序8-3.php中,首先定义了一个数组$arr,并且为其赋值。值得注意的是,数组下标不是按顺序递增的数字,而是毫无规律的字符串。所以不能直接用一个递增的数字作为下标来输出,循环输出遇到了困难。但是使用each()函数可以获得这个数组的下标以及下标对应的值,因此就可以使用循环输出每一个元素的下标和值。函数each($arr)将$arr数组中当前元素的下标和值都存放到另外一个数组$kav中,然后将数组指针指到下一个元素。$kav数组的下标分别为key和value。这样只需要调用$kav["key"]和$kav["value"]即可获的该元素的下标和值。输出这两个值后本次循环结束,执行下一次循环,这样又输出了下一个元素的值,依此类推,整个数组都被动态循环输出了。程序的运行结果如图8-4所示。
图8-4 程序8-3.php的运行结果
通过程序8-4.php看到了each()函数的妙用。其实例8-3.php中的代码还可以继续简化,也可以不用count()函数来统计数组元素的个数,也可以实现动态循环输出一个未知长度的数组。
1: <!--文件8-4.php:each函数的使用-->
2: <HTML>
3: <HEAD>
4: <TITLE>each函数的使用</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $arr = array ("name" = >"Bob", "age"=>20, "sex" = >"male", "postcode"=> "100000");
9: While($kav=each($arr)){
10: echo $kav["key"]."=>".$kav["value"];
11: echo "<br>";
12: }
13: ?>
14: </BODY>
15: </HTML>
程序8-4.php的代码比程序8-3.php简洁,实现的效果却完全相同。例8-4利用了each()函数一个重要性质,那就是当数组已经到达末尾时each()函数返回false。通过前面所学的知识,读者知道false是一个布尔值,表示“否”。因此它正好可以作为while循环的结束条件。这样,可以用一个while循环来每次读取$arr数组中的一个元素,不管数组有多少个元素,当指针到达末尾时,each($arr)返回false,循环结束,程序执行完成。同样实现了动态输出未知长度的数组的功能。程序的运行结果如图8-4所示。
通过例8-4.php也可以说明,有时候实现同一个功能,可以选择多种途径。作为程序开发人员,应该尽量选择更加简洁、高效的途径。
8.3.2.5 current()、reset()、end()、next()和prev()函数
之所以要将这5个函数并列起来介绍,是因为这5个函数的作用相似——它们都用来操作数组内部的指针。在PHP中,使用一个内部指针来指向一个数组。需要访问数组中的某一元素时,只需要将指针移动到该元素的位置,即可取出该元素,这大大方便了用户对数组的操作。下面先详细说明这5个函数的作用,然后通过一个例子来验证其使用效果。
current():返回当前内部指针所指的元素的值。当到达数组末尾时返回false。
reset():将内部指针指向数组的第一个元素,并返回其值。数组为空时返回false。
end():将内部指针指向数组的最后一个元素,并返回其值。
next():将数组指针指向当前元素的下一个元素,并返回其值。到达末尾时返回false。
prev():将数组指针指向当前元素的上一个元素,并返回其值,当到达顶端时返回false。
上面5个函数的返回值均为mixed类型,根据数组元素值的类型不同而返回不同的类型。在这里要注意current()函数和next()函数的不同。他们虽然都是取出一个元素值,但是current()并不移动指针。也就是说current()返回的是未移动指针之前所指向的元素的值,而next()返回的是移动指针之后所指向的元素的值。下面来看一个例子。
1: <!--文件8-5.php:数组内部指针移动-->
2: <HTML>
3: <HEAD>
4: <TITLE>数组内部指针移动函数的综合应用</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $arr=array(1,2,3,4,5,6,7,8,9,10);
9: echo "调用current():".current($arr);
10: echo "<br>";
11: echo "再次调用current():".current($arr);
12: echo "<br>";
13: echo "调用next():".next($arr);
14: echo "<br>";
15: echo "调用reset():".reset($arr);
16: echo "<br>";
17: echo "调用end():".end($arr);
18: echo "<br>";
19: echo "调用prev():".prev($arr);
20: ?>
21: </BODY>
22: </HTML>
程序8-5.php中定义了一个数组$arr,并且用10个数字对其进行了初始化。然后分别调用上述5个函数来观察其运行效果。为了使输出结果直观,在每一次调用之后都输出一个换行。程序运行结果如图8-5所示。
图8-5 程序8-5.php的运行结果
程序8-5.php中定义了一个数组$arr,并且用10个数字对其进行了初始化。然后分别调用上述5个函数来观察其运行效果。为了使输出结果直观,在每一次调用之后都输出一个换行。程序运行结果如图8-5所示。
下面来分析程序的运行流程和对应的输出结果:
1)数组初始化完成,内部指针指向第一个元素(元素值为1)。
2)第一次调用current()函数,返回当前元素值1,指针不变。
3)再次调用current()函数,由于内部指针不变,仍然返回1。
4)调用next()函数,内部指针指向下一个元素,并返回其值(返回2)。
5)调用reset()函数,内部指针再次指向第一个元素,返回1。
6)调用end()函数,内部指针指向最后一个元素,并返回其值(返回10)。
7)调用prev()函数,内部指针指向前一个元素,并返回其值(返回9)。
关于PHP的数组函数,就介绍到这里。表8-1中列出的其他函数,如果读者感兴趣可以自行编写程序进行测试。函数的参数、返回值类型等均可以通过查看PHP手册获得。
compact()函数用于将两个或多个变量转换为数组,当然也包含数组变量。其参数是变量的名称而非带有$全名。相反的函数是extract()作用顾名思义就是将数组转换为单个的字符串,键值作为其字符串名称,数组值作为字符串的值。
each()函数的一个重要性质,那就是当数组已经到达末尾时each()函数返回false