l 数组可以通过用户创建取得,也可以由函数返回,或由函数创建,例如:数据库查询函数。数组就是具有相同属性变量的集合,其本质就是操作和管理存储在其中的变量。
l 关键内容:数组的建立 数组的遍历
l 数组是一组具有相同数据类型元素组成的一个有序图。PHP中的图是一种把 values(值)映射到 keys(键名)的类型。数组通过使用array()函数定义,其值使用“key=>value”的方式设置,多个值通过逗号分割。数组的定义,如以下代码所示。
l <?php
l //为数组的值指定键名
l $one = array(
l "yellow"=>"banana",
l "red"=>"flower",
l "3"=>"三",
l "03"=>"叁“
l );
l //直接为数组赋值
l $two = array(1,2,3,4,5,6,7,8,9);
l //带有一个键名的数组
l $three = array(6=>"六","七","八","九","十");
l ?>
l 数组的简单操作包括显示、添加、修改和删除,演示代码如下所示。
l <?php//定义一个空数组
l $ages = array();
l //使用[]向数组中添加一个没有键名的值
l $ages[] = "十七";
l //使用[]向数组中添加一个有键名的值
l $ages["18"] = "十八";
l $ages[19] = "91";
l //显示数组中的值
l echo $ages[19];
l //改变数组中的一个值
l $ages[19] = "19";
l //删除数组中的一个值
l unset($ages[19]);
l //删除整个数组
l unset($ages);
l //自动生成一个数组并为其赋值
l $newages[] = 20;
l $newages[] = 21;
l 遍历数组,就是把数组中的值,通过某种方法一一展现。数组的应用,大多都要求对数组进行遍历。遍历数组的方法很多,使用foreach()函数遍历数组的方法遍历数组
l <?PHP
l //创建一个数组
l $colors = array("红","蓝","绿","黄","紫","青","橙");
l //使用foreach遍历数组,并取得键名与值
l foreach ($colors as $key => $value) {
l echo "值'{$value}'的键名是$key<br>";
l }
l //使用foreach遍历数组,只取值
l foreach($colors as $value){
l echo "没有键名,只有值:{$value}<br>";
l }
l ?>
1 创建数组的几种方法
在以前介绍的创建数组的方法中,都是由用户使用array()函数来创建的,4.1小节将介绍使用数组函数创建数组的方法。这些方法不仅可以创建了数组,还可以实现更多的数组功能,以满足用户的需要。
1.1 新建一个数组
array()函数就是一个典型的数组函数,用户可以使用其创建一个新的数组,这个新数组可以是空数组,也可以包括定义时给定的数组元素。使用array()函数建立数组的演示代码如下所示。
<?php
//创建一个不带索引的数组
$numbers = array(1,2,3,4,5,6,7,8,9);
//创建一个带有索引的数组
$speed =array(1=>50,2=>120,3=>260,4=>300);
//创建一个二组数组
$two = array(
"color" =>array("red","blue","green"),
"numbers" =>array(1,2,3,4,5,6,7,8,9)
//显示数组所示元素
print_r($two);
//访问数组单个元素
echo $speed[2];
echo $two["color"][0];
?>
1.2 使用变量建立数组
使用compact()函数,可以把单个变量或多个变量,甚至数组,添加为数组的成员,这些数组成员的键名是变量的变量名,值是这些变量的值。compact()函数的参数是要添加入数组的变量的变量名。compact()函数使用方法的演示代码如下所示。
<?php //创建变量
$number = 18;
$string = "字符串";
$array =array("boy","girl");
//使用compact()函数创建新数组
$newArray =compact("number","string","array");
//显示新数组
print_r($newArray);
?>
1.3 使用两个数组创建一个数组
使用array_combine()函数,可以把两个数组合并为一个数组,但不是把两个数组的成员相加,而是使用第1个数组作为新数组的索引,另一个数组作为新数组的值。array_combine()函数使用方法演示代码如下所示。
<?php
//定义二个数组
$keys = array(1,2,3,4);
$values = array("red","green","blue","yellow");
//使用array_combine()创建新数组
$newArray = array_combine($keys,$values);
//显示新数组
print_r($newArray);
?>
2 数组中键名和值的操作
数组函数中对键名和值操作的函数比较多,对键名和值的操作,不仅仅是对已经定义完成的数组进行操作,还可以使用这些函数改变数组的键名和值,以达到程序运行的要求。
2.1 检查数组中是否存在某个键名或值
当一个数组有很多元素时,使用数组遍历来求证某个值或键名是否存在,在速度和效率上有一定的损失。PHP的数组函数提供了更好的解决方法,使用in_array()和array_key_exists()函数,可以快速从一个数组中取得某个值或键名是否存在的情况,下面演示in_array()和array_key_exists()函数的使用方法,
2.2 把数组中的值赋与指定变量
与访问变量相比,访问数组成员相对来说是比较麻烦的。而使用list()函数,可以把数组中的值,赋与指定的变量名,这时就可以在程序中使用这些直观的变量了。下面演示list()函数的使用方法,代码如清单所示。
$value=array("a","b","c","D");
list($a,,$b)=$value;
echo $a.$b;
2.3 交换数组中的键名和值
通常在操作数组时,主要是针对数组单元的值,但是在有些情况下,需要对键名进行修改,删除等操作,这时可以使用array_flip()函数,来交换数组的键名和值,来达到修改或删除键名的操作。下面演示array_flip()函数的使用方法,代码如下所示。
清单 array_flip()函数的使用方法
<?php//建立一个带有键名的数组
$speed =array(1=>50,2=>120,3=>260,4=>300);
//使用array_filp()函数交换键名与值
$speed =array_flip($speed);
echo"交换键名与值后的数组<br>";
print_r($speed);
echo"<br>";
?>
3 遍历数组的3种方法
只有在详细了解数组单元的情况下,才可以对数组做出正确的操作,虽然可以使用print_r()函数和var_dump()函数,来查看数组的成员,但是这两个函数,没有返回值可供操作。而遍历数组,才是在实际应用中,最多访问数组的方法。
3.1 使用while、list与each访问数组
list()函数可以把当前数组单元,转换为变量使用。each()函数可以返回数组中当前单元的键名与值,并将数组指针向下移动一步。使用这两个函数,结合while循环语句,就可以实现对数组的遍历。
3.2 使用for、foreach 访问数组
最常用的遍历数组的就是foreach语句,而且foreach语句也只能用于数组遍历。在实际使用中,可能只是对数组的某一部分进行访问,就不需要对整个数组的单元都遍历一次。这时可以使用for循环语句,就可以实现类似的功能,演示代码如下所示。
<?php
//定义一个数组
$array =range(1,100);
//使用for循环访问定义数组的一部分
for($i=20;$i<=30;$i++){
//显示单元的值
echo$array[$i];
}
//使用for循环语句遍历整个数组
for($i=0;$i<=count($array);$i++){
//显示单元的值
echo$array[$i];
}
?>
4 数组的排序
使用数组排序函数,可以把排序混乱的数组,进行重新整理,变得易于访问或操作。数组排序函数有很多,在实际使用时,可以根据情况来选择或组合使用。
4.1对数组排序
使用sort()函数,可以对已经定义的数组,进行重新排序,使得数组单元从低到高重新索引。sort()函数演示代码如下所示。
<?php
//定义一个测试用数组
$array =array(2=>"b",1=>"a",3=>"c",4=>"d");
//使用sort对数组排序
if(sort($array)== TRUE){
echo"数组排序成功!";
print_r($array);
}else{
echo"数组排序失败";
}
//输出:数组排序成功!Array ( [0] => a [1] => b [2] => c [3] => d )
?>
4.2 对数组逆向排序
数组逆向排序应使用rsort()函数,函数运行后,使得排序数组单元从高到低重新索引。rsort()函数演示代码如下所示。
<?php
//定义一个测试用数组
$array =array(2=>"b",1=>"a",3=>"c",4=>"d");
//使用sort对数组排序
if(rsort($array)== TRUE){
echo"数组排序成功!";
print_r($array);
}else{
echo"数组排序失败";
}
//输出:数组排序成功!Array ( [0] => d [1] => c [2] => b [3] => a )
?>
4.3 对数组排序并保持索引关系
使用sort()或rsort()函数,虽然能对数组进行排序,但是实际应用中,有些重要的数组需要保持单元的索引关系。在排序的同时,保持数组的索引关系,可以使用asort()和arsort()函数。asort()函数是把数组按正向排序,arsort()函数把数组按逆向排序。下面演示这两个函数的使用方法,
4.4 对数组按照键名排序
使用ksort()、krsort()函数,可以对数组的键名进行排序,并且可以保持键名与值的关联。ksort()函数用于对数组的键名进行正向排序,krsort()函数用于对数组的键名进行逆向排序。下面演示这两个函数的使用方法,代码如清单所示。
清单 ksort()、krsort()函数的使用方法
<?php
//定义一个带有键名的测试用函数
$array =array("driver"=>"Tom","car"=>"tubro","speed"=>"360","level"=>6);
//使用ksort()对数组按键名排序
ksort($array);
echo"显示排序后的数组:";
print_r($array);
echo"<br>";
//使用krsort()函数按键名逆向排序
krsort($array);
echo"显示排序后的数组:";
print_r($array);
?>