1
2
3
4
5
6
7
8
9
10
11

数组函数

发布时间:2017-07-20 08:04   发布人:毛书朋   浏览次数:5889

 

关联课件:8子项目八 -数组函数(点击在线预览)

 

 

  8.3.2  数  组  函  数

 

8.3.2.1  数组函数概述       

                                              

数组是编程中的重要元素,在PHP中也不例外。在PHP语法部分已经介绍了数组的定义和使用,对数组有了一定了解。PHP中还为用户提供了一系列用来操作数组的函数,这些函数为标准函数,可以直接使用。表8-1列出了PHP5.1.6提供的数组函数。

8-1.1.png

8-1.2.png

8-1.3.png

 

看到这个表读者可能大吃一惊,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,并且每个元素分别赋值01234。然后定义了同样5个元素的数组$arr2,并分别赋值01234。两个数组的不同是第一个数组用了默认的数字作为下标,第二个数组用了自定义的字符作为下标。因此最后输出数组元素时也使用了各自对应的下标。程序的运行结果如图8-3所示。

8-3.jpg

8-3  程序8-1.php的运行结果

 

8.3.2.3  count()函数

count()函数可以用来统计一个数组中元素的个数,在循环遍历一个未知长度的数组时非常有用。看下面的例子。

1:  <!--文件8-2.phpCount函数的使用-->

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.phpeach函数的使用-->

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数组的下标分别为keyvalue。这样只需要调用$kav["key"]$kav["value"]即可获的该元素的下标和值。输出这两个值后本次循环结束,执行下一次循环,这样又输出了下一个元素的值,依此类推,整个数组都被动态循环输出了。程序的运行结果如图8-4所示。

 

8-4.jpg

8-4  程序8-3.php的运行结果

 

通过程序8-4.php看到了each()函数的妙用。其实例8-3.php中的代码还可以继续简化,也可以不用count()函数来统计数组元素的个数,也可以实现动态循环输出一个未知长度的数组。

1:  <!--文件8-4.phpeach函数的使用-->

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.jpg

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手册获得。

 


  • 程艳秋 2018-01-08 19:36:11
    compact()函数用于将两个或多个变量转换为数组,当然也包含数组变量。其参数是变量的名称而非带有$全名。相反的函数是extract()作用顾名思义就是将数组转换为单个的字符串,键值作为其字符串名称,数组值作为字符串的值。
  • 甄丹丹 2018-01-09 15:56:26
    each()函数的一个重要性质,那就是当数组已经到达末尾时each()函数返回false