当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

第8章PHP数组类

9/17/2020 9:34:15 PM 人评论

第8章PHP数组类

第8章 PHP数组类

在进行程序开发的过程中,有时会需要创建许多相似的变量。对于这些相似的变量,可以把数据作为元素存储在数组中。PHP的数组除了具有一般数组的特性外,它还提供了与数组操作有关的大量行为和函数。本章以一个循序渐进的方式来探讨PHP所支持的基于数组的特性和常用功能。

8.1 什么是数组

本节主要介绍数组的基础知识,包括什么叫数组及如何创建PHP中的几种数组。

8.1.1 什么是PHP的数组

数组,顾名思义就是数据的组合。那么什么样的数据会被组合在一起呢?在现实生活中,往往会把具有相似性的事物组放在一起,例如会把学习用的书本放在书架上,写字的笔放在笔筒里,餐具放在厨房的橱柜里等。

在程序设计中通常把数组(array)定义为一组由某种共同特性的元素组成的集合,如具有相似性的集合(车模、棒球队、水果类型等)和相同类型的集合(例如所有元素都是字符串或整数)。每个元素都包括键(key)和值(value)两个项。其中一个集合中的键都是唯一的,可以通过查询“键”来获取其相应的“值”。

PHP中的数组实际上是一个有序图。图是一种把values映射到keys的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量)、散列表(是图的一种实现)、字典、集合、栈、队列及更多可能性。因为可以用另一个PHP数组作为值,也可以很容易地模拟树。由此可见PHP数组的功能强大。

8.1.2 创建PHP的数组

PHP中的数组基本可分为三大类,分别是数值数组、关联数组、多维数组。下面就分别举几个例子来说明如何创建这些数组。

1. 创建数值数组

数值数组存储的每个元素都带有一个数字标识键。可以使用不同的方法来创建数值数组。创建时自动分配数字标识键,代码如下。

$names = array("张三", "李四", "王五");

这段代码是使用array函数来创建一个含有三个元素的数值数组。

注意 这里的数值索引数组以位置0起始,而不是1。

也可以用人工分配数字标识键的方式创建相同的一个数组,代码如下。

$names[0] = "张三"; 
$names[1] = "李四"; 
$names[2] = "王五";

代码8-1演示了如何打印数值数组的结构并使用数字标识键读取相应的值。

代码8-1 打印数值数组并使用数字标识键读取相应的值

<pre>
<?php 
//以人工分配数字标识键的方式创建数组 
$names[0] = "张三"; 
$names[1] = "李四"; 
$names[2] = "王五"; 
print_r($names); 
echo $names[1] . " 和 " . $names[2] . " 都是 ". $names[0] . "的小学同学"; //在页面上输出结果 
?> 
&lg;/pre>

运行后的输出结果如图8.1所示。

015-01

图8.1 数值数组打印和输出

2. 创建关联数组

关联数组,它的每个标识键都关联一个值。在存储有关具体命名的值的数据时,使用数值数组可能不是最好的做法。通过关联数组,程序中可以把值作为键,并向它们赋值。

使用一个数组把年龄分配给不同的人,代码如下。

$ages = array("张三"=>32, "李四"=>30, "王五"=>34);

用自定义标识的方式创建一个相同的数字,代码如下。

$ages['张三'] = "32"; 
$ages['李四'] = "30"; 
$ages['王五'] = "34";

代码8-2演示了打印关联数组的结构并演示如何读取所创建的关联数组。

代码8-2 读取关联数组的值

<pre> 
<?php 
//以人工分配关联标识键的方式创建数组 
$ages['张三'] = "32"; 
$ages['李四'] = "30"; 
$ages['王五'] = "34"; 
print_r($ages); 
echo "李四现在有" . $ages['李四'] . "岁了"; //在页面上输出结果
?> 
&lg;/pre>

运行后的输出结果如图8.2所示。

016-01

图8.2 读取关联数组的值

3. 创建多维数组

在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,以此类推。创建一个带有自动分配的标识键的多维数组,代码如下。

$families = array 
( 
    "brother"=>array("大明", "二明", "三明"),
    "sister"=>array("MeiMei"), 
    "nuncle"=>array("张三", "李四", "王五") 
);

代码8-3演示了如何读取所创建的多维数组的某个值。

代码8-3 读取多维数组的某个值

<pre> 
<?php 
//创建多维数组 
$families = array 
( 
    "brother"=>array("大明", "二明", "三明"), 
    "sister"=>array("MeiMei"), 
    "nuncle"=>array("张三", "李四", "王五") 
); 
print_r($families); 
echo "我有一个表妹,她的名字叫 " . $families[sister][0]; //输出 
?> 
&lg;/pre>

运行后的输出结果如图8.3所示。

015-01

图8.3 读取多维数组的值

8.2 增加删除数组元素

在前一节,对什么是数组及如何创建数组做了全面的讲解。那创建数组以后,如何对其进行增加和删除的操作?PHP提供了一系列有用的函数,使这些操作变得非常方便。

8.2.1 使用$arrayname[ ]增加数组元素

这不是一个函数,而是PHP语言的一个特性。只要通过赋值就能增加数组元素,例如有如下一个数组。

$goods = array('毛衣', '领带', '头巾');

可以用如下代码,直接添加一个元素上去。

$goods['new'] = '裤子';

添加后,这个数组如果用print_r函数打印出来的话,应该是如下结果。

Array 
( 
    [0] => 毛衣 
    [1] => 领带 
    [2] => 头巾 
    [new] => 裤子 
)

对于这个数值数组,还有一种方式来添加元素,代码如下。

$goods[] = '毛衣';

追加后数组的结果如下。

Array 
( 
    [0] => 毛衣 
    [1] => 领带 
    [2] => 头巾 
    [3] => 毛衣 
)

可以从结果中看出,使用这种方式添加的数据元素,它的数值标识会是这个数值中已存在的那个最大标识数自动加1。这种自动递增的特点在动态增加数组元素时能给程序设计带来很大的方便,省去了用程序来判断最大的数值标识并递增的过程。

8.2.2 使用unset()删除数组中的元素

实际上unset()是用来销毁指定的变量的,但是也使用它来删除数组中的元素,而且在删除数组中指定的某个元素时,使用这个方法是非常方便的。

比如有如下的一个数组,需要删除其中值为summer的元素。

$seasons = array(1=>'spring', 2=>'summer', 3=>'autumn', 4=>'winter');

观察后可以发现这个元素的键为“2”,所以使用如下语句。

unset($seasons[2]);

这样就可以把数组中的值为summer的元素删除,最后得到的数值结果如下。

Array 
( 
    [1] => spring 
    [3] => autumn 
    [4] => winter 
)

注意 在PHP 3中,unset()将返回TRUE(实际上是整型值1),而在PHP 4或更高版本中,unset()不再是一个真正的函数:它现在是一个语句。这样就没有了返回值,试图获取 unset()的返回值将导致解析错误。

8.2.3 使用array_push()压入数组元素

PHP提供一个入栈函数array_push(),可以将一个或多个单元压入数组的末尾(入栈)。该函数的语法如下所示。

int array_push ( array &array, mixed var [, mixed ...] )

该函数将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。代码8-4演示该函数的用法,如下所示。

代码8-4 使用array_push()压入数组元素

<pre> 
<?php 
$stack = array("orange", "banana");         //创建数组 
echo "原数组:"; 
echo "<br />"; 
print_r($stack);                            //打印数组 
array_push($stack, "apple", "raspberry");   //入栈,压入到最后一个元素 
echo "入栈后的数组:"; 
echo "<br />"; 
print_r($stack); //打印数组 
?> 
&lg;/pre>

执行代码后的结果如图8.4所示。

015-01

图8.4 使用array_push()压入数组元素

8.2.4 使用array_pop()弹出数组元素

PHP提供一个入栈函数array_pop(),将数组最后一个单元弹出(出栈)。该函数的语法如下所示。

mixed array_pop ( array &array )

该函数弹出并返回array数组的最后一个单元,并将数组array的长度减1。如果array为空(或者不是数组)将返回NULL。代码8-5演示了该函数的用法,如下所示。

代码8-5 使用array_pop()弹出数组元素

<pre> 
<?php 
$stack = array("orange", "banana", "apple", "raspberry");  //创建数组 
echo "原数组:"; 
echo "<br />"; 
print_r($stack);                                           //打印数组 
$fruit = array_pop($stack);                                //出栈,弹出最后一个元素 
echo "出栈后的数组:"; 
echo "<br />"; 
print_r($stack);                                           //打印数组 
?> 
&lg;/pre>

执行代码后的结果如图8.5所示。

015-01

图8.5 使用array_pop()弹出数组元素

8.3 遍历输出数组

在前几节中已经介绍了如何创建一个数组并对数组进行添加和删除。既然有了这些数组,那么接下来就是怎么显示数组的问题。所以本小节主要讲述用print_r来显示数组信息,以及如何用for和foreach语句遍历并显示这些数组的内容。

8.3.1 使用print_r()打印数组

PHP提供一个输出变量详情的函数print_r(),用来打印关于变量的易于理解的信息。该函数的语法如下所示。

bool print_r ( mixed expression [, bool return] )

该函数显示关于一个变量的易于理解的信息。其中expression就是需要显示的参数,如果给出的是string、integer或float,将打印变量值本身。如果给出的是array,将会按照一定格式显示键和元素。object与数组类似。记住,print_r()将把数组的指针移到最后边。使用reset()可让指针回到开始处。

return是一个可选参数,可以用来修改函数的行为,将输出返回给调用者,而不是发送到标准输出。

代码8-6是使用print_r函数的例子,如下所示。

代码8-6 使用print_r输出数组1

<?php 
$country = array("Chinese", "Korea", "America", "Japan");   //创建数组
print_r($country);                                          //打印数组
?>

运行此代码后的结果如图8.6所示。

016-01

图8.6 使用print_r输出数组1

但是,对于这个输出的样式,如果数据一多,就不好识别。为了解决这个问题,可以多加一个HTML语言的“<pre>”标签。这个标签可以把包含在其中的空格、回车、换行、制表符等按照文本原先的格式显示出来。代码8-7就是使用了“<pre>”标签和print_r函数打印数组的例子。

代码8-7 使用print_r输出数组2

<pre> <!-- 原格式开始标签--> 
<?php 
$country = array("Chinese", "Korea", "America", "Japan");    //创建数组 
print_r($country);                                           //打印数组 
?> 
</pre><!-- 原格式结束标签-->

运行此代码后的结果如图8.7所示。

016-01

图8.7 使用print_r输出数组2

可以发现,现在的输出格式要比没有使用标签时清楚许多。

8.3.2 使用for循环语句输出数组

对于一个按照整数顺序索引的数值数组,可以使用for循环语句来依次访问其中的数组元素,如代码8-8所示。

代码8-8 使用for循环语句输出数组

<pre> 
<?php 
$country = array("Chinese", "Korea", "America", "Japan");    //创建数组
$count = count($country); 
echo "使用for语句遍历数组"; 
echo "<br />&nbsp;<br />"; 
for($i = 0; $i < $count; $i++)                    //使用for语句遍历数组
{ 
    $j = $i + 1;      //自动分配的下标是从0开始的 
    echo "第{$j}个元素是:$country[$i]"; //根据数值标识,打印数值元素 
    echo "<br />&nbsp;<br />"; 
} 
?>
&lg;/pre>

运行上述代码后,显示的结果如图8.8所示。

016-01

图8.8 使用for循环语句输出数组

8.3.3 使用foreach循环语句输出数组

for循环语句提供一种遍历数组的方式,这种方式虽然很简便,但是也有它的局限性。如果一个数组是关联数组,那么用for语句就显得不合适了。这个时候就可以用PHP专门为数组和对象遍历提供的foreach循环语句。它的语法结构如下所示。

foreach (array_expression as $value) 
   statement 
foreach (array_expression as $key => $value) 
   statement

第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给$value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,除了当前单元的键名也会在每次循环中被赋给变量$key。

注意 当foreach开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在foreach循环之前调用reset()。

代码8-9是一个使用foreach遍历数组的例子,如下所示。

代码8-9 使用foreach遍历数组

<pre> 
<?php 
$country = array('C'=>"Chinese", 'K'=>"Korea", 'A'=>"America", 'J'=>"Japan");  
//创建数组 
echo "使用foreach语句遍历数组"; 
echo "<br />&nbsp;<br />"; 
foreach($country as $key=>$value)        //使用foreach语句遍历数组 
{ 
    echo "$key 代表:$value";               //打印键和值 
    echo "<br />&nbsp;<br />"; 
} 
?> 
&lg;/pre>

在这段代码中,每次foreach循环都会将数组的一个索引赋值给变量$key,把对应的值赋值给遍历$value。执行以上代码后,得到的结果如图8.9所示。

016-01

图8.9 使用foreach遍历数组

8.4 数组排序

众所周知,数据排序是计算机科学的一个重要问题。任何上过入门级编程课的人都知道一些排序算法,如冒泡排序、堆排序、希尔排序和快速排序等。这个问题在日常编程任务中出现得非常频繁,对数据排序就如同创建if条件或while循环一样成为常事。PHP提供了能以多种不同方式对数组排序的大量有用的函数,从而简化了这个过程。本节就针对这些函数做详细的介绍。

8.4.1 使用sort对数组进行排序

PHP提供排序的sort()函数使用语法如下所示。

bool sort ( array &array [, int sort_flags] )

该函数会对array进行排序,各元素按值由低到高的顺序排列。sort_flags参数可选,将根据这个参数指定的值修改该函数的默认行为。其代表的含义如下所示:

  • SORT_NUMBERIC:按数值排序。对整数或浮点数排序时很有用。
  • SORT_REGULAR:按照相应的ASCII值对元素排序。例如,这意味着B在a的前面。在网上很快就能查到很多ASCII表,所以本书就不再列出。
  • SORT_STRING:按接近于人所认知的正确顺序对元素排序。有关的更多信息请参阅本节后面介绍的natsort()。
  • SORT_LOCALE_STRING:根据当前的区域(locale)设置来把单元当做字符串比较。

注意 它不返回排序后的数组。相反,它只是“就地”对数组排序,不论结果如何都不返回任何值。

代码8-10是使用sort()对数组排序的例子,如下所示。其输出效果如图8.10所示。

015-01

图8.10 使用sort()对数组排序

代码8-10 使用sort()对数组排序

<pre> 
<?php 
$fruits = array("lemon", "orange", "banana", "apple"); 
echo "原数组:"; 
echo "<br />"; 
print_r($fruits); 
echo "使用sort()排序后的数组:"; 
echo "<br />"; 
sort($fruits); 
print_r($fruits); 
?> 
&lg;/pre>

8.4.2 使用rsort对数组进行逆向排序

rsort()函数与sort()相同,只是它以相反的顺序(降序)对数组元素排序。

bool rsort ( array &array [, int sort_flags] )

该函数接受一个数组作为输入参数,如果处理成功返回TRUE,否则返回FALSE。如果包括了可选的sort_flags参数,那么具体的排序行为将由这个值来确定,请参见8.4.1节中的解释。

注意 它不返回排序后的数组。相反,它只是“就地”对数组排序,不论结果如何都不返回任何值。

代码8-11是使用rsort()对数组排序的例子,如下所示。其输出效果如图8.11所示。

015-01

图8.11 使用rsort()对数组排序

代码8-11 使用rsort()对数组排序

<pre> 
<?php 
$fruits = array("lemon", "orange", "banana", "apple"); 
echo "原数组:"; 
echo "<br />"; 
print_r($fruits); 
echo "使用rsort()排序后的数组:"; 
echo "<br />"; 
rsort($fruits); 
print_r($fruits); 
?> 
&lg;/pre>

8.4.3 数组的随机排序

PHP提供一个可对数组进行随机排序的函数shuffle(),使用该函数的语法如下。

bool shuffle ( array &array )

使用该函数很简单,只传入一个需要对其进行随机排序的数据即可,如果排序成功返回TRUE,否则返回FALSE。

注意 该函数排序后会删除原函数的键名,并自动生成。

代码8-12演示了该函数的用法,如下所示。

代码8-12 数组的随机排序

<pre> 
<?php 
$test_array = array("first" => 1,"second" => 2,"third" => 3,"fourth" => 4); 
echo "原数组:"; 
echo "<br />"; 
print_r($test_array); 
echo "使用shuffle()随机排序后的数组:";
echo "<br />"; 
shuffle($test_array);
print_r($test_array);
?> 
&lg;/pre>

上述代码运行后第一次的结果如图8.12所示,可以看到数组经过shuffle()函数的排序以后,其中的元素被随机排序。然后刷新页面,再次执行代码,得到的结果如图8.13所示。两次得到的结果不一致,证明数组被再次随机排序。

010-01 011-02
图8.12 数组的随机排序1 图8.13 数组的随机排序2

8.4.4 数组的反向排序

PHP提供一个array_reverse()函数用来对数组进行反向排序的操作,其使用的语法如下所示。

array array_reverse ( array array [, bool preserve_keys] )

该函数接受数组array作为输入并返回一个单元为相反顺序的新数组,如果preserve_keys为TRUE则保留原来的键名。代码8-13是使用这个函数的示例,代码如下。

代码8-13 数组的反向排序

<pre> 
<?php 
$input  = array("test", 5.0, array("green", "red", "blue"));   //创建一个多维数组 
echo "原数组:"; 
echo "<br />";  
print_r($input);                                               //打印原数组 
$result = array_reverse($input);                               // 使用array_reverse对数组逆向排序
echo "使用array_reverse()反向排序后的数组:"; 
echo "<br />"; 
print_r($input);                                               //打印排序后数组 
$result_keyed = array_reverse($input, TRUE);                   //设置第二个参数为TRUE 
echo "使用array_reverse()反向排序,而且第二个参数为TRUE的结果:"; 
echo "<br />"; 
print_r($result_keyed);                                        //打印排序后数组 
?> 
&lg;/pre>

运行代码后,得到如图8.14所示的结果。从中可以了解到,使用array_reverse()函数时,示例中的多维数组进行一次逆向排列,其中的元素键值也发生了相应的改变。当第二个参数设置为TRUE时,数组逆转但元素的键值没有发生改变。

016-01

图8.14 数组的反向排序

注意 使用array_reverse只能对当前数组的第一维元素进行反向。如果第一维中还含有数组,那么将保持原来的顺序不变。

8.5 合并与拆分数组

本节介绍的函数能完成一些更复杂的数组处理任务,例如,接合和合并多个数组、从数组元素中提取一部分,以及完成数组比较。

8.5.1 合并数组

array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面,其使用的语法如下所示。

array array_merge ( array array1 [, array array2 [, array ...]] )

该函数返回作为结果的数组。如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

代码8-14是使用这个函数的示例,代码如下。

代码8-14 合并数组

<pre> 
<?php 
$array1 = array("颜色" => "蓝色", 2, 4);                                  //创建一个数据 
$array2 = array("类型", "名称", "颜色" => "红色", "笔刷" => "毛笔", 4);   //创建另外一个数组
$result = array_merge($array1, $array2);                                  //合并数组 
print_r($result);                                                         //输出合并后的数组
?> 
&lg;/pre>

以上代码首先创建两个数组变量$array1和$array2,然后使用array_merge()函数将这两个数组合并。代码运行后的结果如图8.15所示。

016-01

图8.15 合并后的数组

8.5.2 拆分数组

array_slice()函数返回根据offset和length参数所指定的array数组中的一段序列,其使用的语法如下所示。

array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )

如果offset非负,则序列将从array中的此偏移量开始。如果offset为负,则序列将从array中距离末端这么远的地方开始。

如果给出了length并且为正,则序列中将具有很多的单元。如果给出了length并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset开始一直到array的末端。

注意 array_slice()默认将重置数组的键,可以通过将preserve_keys设为TRUE来改变此行为。

代码8-15是使用这个函数的示例。

代码8-15 拆分数组

<span class="kindle-cn-bold">拆分数组</span><hr> 
<pre>
<?php 
$fruits = array("苹果", "桔子", "西瓜", "香蕉", "葡萄", "柚子");        //创建一个数据
$output1 = array_slice($fruits, 4);                                     //取第4个以后的数据 
$output2 = array_slice($fruits, 2, -2);                                 //取第2个以后且是倒数第2个以前的数据 
echo "原数组:"; 
echo "<br />"; 
print_r($fruits); 
echo "取第4个以后的数据:"; 
echo "<br />"; 
print_r($output1); 
echo "取第2个以后且是倒数第2个以前的数据:"; 
echo "<br />"; 
print_r($output2); 
?> 
&lg;/pre>

以上代码创建一个包含各种水果的数组,分别用array_slice()函数来取得其第4个以后的数据和第2个以后且是倒数第2个以前的数据。代码运行后的结果如图8.16所示。

016-01

图8.16 拆分数组

8.6 典型实例

【实例8-1】数组的元素是由键名与值组成的,使用list()可以把数组中的值赋给指定变量。List()只能用于一维数组的访问。而each()函数可以返回指定数组的键名与值,并把数组的指针向下移动一步。使用这两个函数,再配合while循环,就可以完成对二维数组的遍历了。

本实例代码主要演示了使用list()与each()函数,配合while循环完成数组遍历的操作,代码中的函数使用方法如下所示。

list()并不是一个函数,而是一种语言结构,其使用方法很特别,方法如下所示。

list(变量列表) = 数组变量;

其中变量列表中变量的值,将根据数组变量中的元素取得。而list()函数本身,只能读取数组的第一维数据。

list()仅能用于数字索引的数组,并且索引值是从0开始的数组。

each()函数的参数是数组,其返回值也是一个数组,内容是当前数组的键名和值。

代码8-16 使用list()与each()函数

<?php 
/*************************设置变量************************************/ 
$teacher = array("老张","28","讲师"); 
$student = array( 
    array("小李",19,"计算机"), 
    array("小张",18,"计算机"), 
    array("小刘",19,"计算机"), 
    array("小苑",20,"计算机"), 
    array("小吴",20,"计算机"), 
    array("小王",20,"计算机"), 
    array("小朱",18,"计算机") 
); 
//使用list()读取$teacher数组 
list($tname,$tage,$tjob) = $teacher; 
echo "姓名:".$tname.",今年".$tage."岁,职业:".$tjob; 
//使用each()返回数组的键/值 
$kv = each($student); 
echo "<pre>"; 
print_r($kv); 
echo "</pre>"; 
//使用list()、each()配合while读取二维数组并转化为表格。 
$table = "<table border='1'><tr><th>姓名</th><th>年龄</th><th>专业</th></tr>"; //表格头部数据 
while(list($key,$val)=each($student)){  //使用while语句遍历数组 
 $table .= "<tr><td>".$val[0]."</td><td>".$val[1]."</td><td>".$val[2]."</td></tr>";  
//保存有数组内容的表格数据 
} 
$table .= "</table>";  //表格结束数据 
echo $table; 
?>

运行该程序后,运行结果如图8.17所示。

015-01

图8.17 程序运行结果

【实例8-2】既然while循环可以遍历数组,那么for循环也可以现实这一功能,而foreach是一种专门用于遍历数组的方法,对于while和for循环来说更加简单,本实例将介绍如何使用for、foreach遍历数组。

本实例代码中使用了count()函数,其作用是取得数组的元素数量。for循环只有在知道数组元素个数的情况下,才能正确地遍历数组。

使用for循环遍历数组,也只能遍历以数字索引的数组,并且索引值是从0开始的数组。而foreach遍历数组时,可以遍历任何数组,包括以字符索引的数组。

代码8-17 使用for、foreach遍历数组

<?php 
/*************************设置变量************************************/ 
$student = array( 
    array("小李",19,"计算机"), 
    array("小张",18,"计算机"), 
    array("小刘",19,"计算机"), 
    array("小苑",20,"计算机"), 
    array("小吴",20,"计算机"), 
    array("小王",20,"计算机"), 
    array("小朱",18,"计算机") 
); 
echo "使用for遍历二维数组并转化为表格。"; 
$table = "<table border='1'><tr><th>姓名</th><th>年龄</th><th>专业</th></tr>"; 
for($i=0;$i<=count($student);$i++){ //使用count()函数,获取数组元素的个数 
 $table .= "<tr><td>".$student[$i][0]."</td><td>".$student[$i][1]."</td><td>".$student[$i] [2]."</td></tr>";  //带有数组内容的表格代码 
} 
$table .= "</table>"; 
echo $table; 
echo "使用foreach遍历二维数组并转化为表格。"; 
$table = "<table border='1'><tr><th>姓名</th><th>年龄</th><th>专业</th></tr>"; 
foreach($student as $key=>$val){ 
//使用foreach语句,将数组$student的单个元素的键名和值,保存到变量$key和$val中,并将数组指针向下移动一位 
    $table .= "<tr><td>".$val[0]."</td><td>".$val[1]."</td><td>".$val[2]."</td></tr>"; 
} 
$table .= "</table>"; 
echo $table; 
?>

运行该程序后,运行结果如图8.18所示。

016-01

图8.18 程序运行结果

8.7 小结

在编程中数组的作用不可或缺,不论是否基于Web的,或者在其他的各种应用程序中,都不乏数组的身影。本章从简单数组讲解入手,逐步深入地学习了各种数组操作方法和技巧。本章的目的是使读者了解PHP的众多数组函数,这些函数能让处理数组的工作更轻松。

8.8 习题

一、填空题

1. 数组由_____、_____、_____三部分构成。

2. 能作为数组键名的数据类型为_____、_____。

3. 函数__________能够判断变量是不是数组。

4. 利用函数print r()输出数组,该函数能够直接输出数组的__________及其__________。

5. 函数_____返回与当前元素相关联的值,而函数_____返回与当前元素相关联的键名。

6. 如果数组的元素相同,键名不同,利用_____运算符作出判断,返回false。

7. 进行数组排序可以按数组的_____或_____进行排序,排列方式可以是_____,也可以是_____。

8. sort函数不仅是重新排序,删除$array数组中原有的_____,而且为数组中的单元赋予新的_____,当本函数运行结束时,数组单元将被_____重新排列。

二、选择题

1. 能够计算数组元素个数的函数为( )。

A. array
B. list
C. count
D. sort

2. 对数组的元素值按从大到小进行排序的是( )。

A. sort()
B. rsort()
C. usort()
D. assort()

3.程序返回的数组元素个数为( )。

01 $animal=array("horse", 
02            "monkey", 
03            "lion"); 
04 $num=eacho($animal)

A. 1
B. 2
C. 3
D. 4

4. 下面程序的运行结果为( )。

01 $numb=array(array(10,15,30), 
02        array(10,15,30), 
03        array(10,15,30) 
04         ); 
05           echo count($numb, 1) ;

A. 3
B. 6
C. 9
D. 12

5. 下面程序的运行结果为( )。

$a = array("a","b","c","d") ;  
$index = array search("a",$a) ;  
if ($index ==false) 
echo "在数组a中发现字符’a’ ";  
else 
echo "Indes = $index";

A. 在数组a中未发现字符‘a’
B. 0
C. 1
D. 2

三、简答题

1. 简述创建数组的方法。

2. 简述each遍历数组返回的4个单元的数组的意义。

3. 列出按元素值排序的6个函数。

四、编程题

1. 把下列信息存放到一个二维表,然后遍历输出。

张三 李四 王五 赵六

86  90  82  85

2. 将学生成绩(87,67,92,65,84,72,78)放进一个数组中,显示其元素个数,然后按降序排列。

上一篇:第7章函数

下一篇:第二篇PHP参考函数

相关教程

共有条评论 网友评论

验证码: 看不清楚?