学习重点:
- 数字索引数组
- 非数字索引数组
- 数组操作符
- 多维数组
- 数组排序
- 数组函数
在第一章和第二章,我使用的变量是标量变量 (只能存储单个数值)。而数组可以具有许多个元素。PHP只吃数字索引数组和关联数组。
关联数组允许使用更有意义的数据作为索引。每个元素除了可以使用数字索引外,还可以使用字符串或其他更有意义的信息作为索引.
数组:一个用来存储一系列变量值的命名区域。—— 标量变量:一个用来存储数值的命名区域。
- 数字索引数组
初始化:建立一个简单的数组,示例:$products = array('Tires','Oil','Spark Plugs');这样就创建了一个名为$products的数组,它包含三个定值——"Tires","Oil","Spark Plugs"
其中,array()实际上是一个语言结构,不是一个函数。
如果需要将所需数据保存到另一个数组中,可以直接使用"="将数组复制到另一个数组:$products2 = $products;
如果需要将按升序排列的数字保存在一个数组中,可以使用range()函数自动创建这个数组:$number = range(1,10);其中,range()函数还有第三个可选的参数,这个参数
允许设定值之间的步幅,例如我们可以这样创建一个1,3,5,7,9的数组:$number = range(1,10,2); (其中步幅为2)
range()函数还可以对字符进行操作:$letter = range('a','z');
访问数组的内容:要访问一个变量的内容,可直接使用其名称;
如果该变量是一个数组,可用变量名称和关键字或者索引的组合来访问其内容。
例:使用$products[0],$products[1],$products[2]就可以访问$products数组中的内容了。
使用循环访问数组:
//create an array $products = array('Tires','Oil','Spark Plugs'); for($i = 0;$i < 3;$i++){ echo $products[$i]." ";
示例结果为:Tires Oil Spark Plugs
也可以使用foreach循环,即:
//create an array $products = array('Tires','Oil','Spark Plugs'); foreach($products as $current){ echo $current." "; }
示例结果仍为:Tires Oil Spark Plugs
foreach语法结构:仅能够用于数组和对象。有两种用法:
【1】foreach (array_expression as $value)
statement
【2】foreach (array_expression as $key => $value)
statement
第一种格式遍历给定的 array_expression 数组,每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
TIPS:可以通过在$value之前加上 & 来修改数组的元素。
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); // 最后取消掉引用 ?>
注意$value的引用仅在被遍历的数组可以被引用时才可用,下面的代码则无法运行:
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
- 使用不同索引的数组
在关联数组中,可以将每个变量值与任何关键字或索引关联起来。
初始化关联数组:$prices = array('Tires' => 100,'Oil' => 10,'Spark Plugs' => 4); 这样就可以创建一个以产品名称作为关键字、以价格作为值得关联数组。
访问数组元素:可使用变量名称和关键字来访问数组的内容,因此可以用$prices['Tires'],$prices['Oil'],$prices['Spark Plugs']来访问prices数组中的信息。
使用循环语句:(因为关联数组的索引不是数字,所以不能用计数器对数组进行操作),使用 foreach循环 或 list() 和 each() 结构
当使用foreach循环时,可以这样使用:
$prices = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4); foreach ($prices as $current){ echo $current." "; }
示例结果为:100 10 4
也可以这样:
$prices = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4); foreach ($prices as $key => $value){ echo $key." - ".$value."<br />"; }
示例结果为:
下面是用each()结构打印$prices数组的内容:
$prices = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4); while($element = each($prices)){ echo $element['key']; echo " - "; echo $element['value']; echo "<br />"; }
示例结果为:
each()函数将返回数组的当前元素,并将下一个元素作为当前元素。在while循环中调用each()函数,它将按顺序返回数组中每个元素,并且当它到达数组末尾时,循环操作将终止。
下面是list()函数的使用:
$prices = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4); while(list($product,$price) = each($prices)){ echo "$product - $price<br />"; }
以上代码使用each()从$prices数组中取出当前元素,并且将它作为数组返回,然后再指向下一个元素。它还用list() 将从each()返回的数组中所包含0、1两个元素变为两个名为 $product 和 $price 的新变量。
- 数组操作符