一.数组的概述
1.数组的本质:管理和操作一组变量
2.数组是复合类型
3.数组中可以存储任意长度的数据,也可以存储任意类型的数据
4.数组就可以完成其它语言数据结构的功能(链表,队列,栈,集合类)
二.数组的分类
数组中存有多个单元(单元称为元素)
每个元素都是由下标(键)和值组成
单独访问元素时,都是通过下标(键)来访问元素
1.一维数组,二位数组,多维数组(数组的数组)
2.PHP中有两种数组
索引数组:就是下标是顺序整数作为索引
关联数组:就是下标是字符串作为索引
下标(整数或字符串)
三.数组多种声明方式
1.直接为数组元素赋值
a.如果索引下标不给出,就会从0开始顺序索引
b.如果给出索引下标,下一个就会是从最大的增一
c.如果后面出现前面的下标,如果是赋值就是为前面的元素重新赋值
1 <?php 2 //索引数组 直接声明 3 $user[]=1; 4 $user[0]="zhangsan"; 5 $user[9]=10; 6 $user[2]="nan"; 7 $user[]="aa@bb.com"; 8 9 echo '<pre>'; 10 print_r($user); 11 echo '<pre>'; 12 ?>
1 <?php 2 //关联数组 直接声明 3 $user["id"]=1; 4 $user["name"]="zhangsan"; 5 $user["age"]=10; 6 $user["sex"]="nan"; 7 $user["email"]="aa@bb.com"; 8 9 echo '<pre>'; 10 print_r($user); 11 echo '<pre>'; 12 ?>
2.使用array()函数
a.默认是索引数组
b.如果为关联数组和索引数组指定下标,使用键=>值
c.多个成员之间使用逗号分隔
1 <?php 2 //使用array声明默认为索引数组 3 $user=array(1,"zhangsan",10,"nan","aa@bb.com"); 4 5 //使用关联数组 6 $user1=array("id"=>2,"name"=>"lisi","age"=>20,"sex"=>"nan","email"=>"aa@bb.com"); 7 8 echo '<pre>'; 9 print_r($user); 10 echo '<pre>'; 11 12 echo '<pre>'; 13 print_r($user1); 14 echo '<pre>'; 15 ?>
二维数组
1 <?php 2 $user=array( 3 array(1,"zhangsan","nan"), 4 array(2,"lisi","nv"), 5 array(3,"wangwu","nan") 6 ); 7 8 echo $user 9 echo '<pre>'; 10 print_r($user); 11 echo '<pre>'; 12 13 echo $user[1][1]; 14 ?>
三维数组
1 <?php 2 //声明一个三维数组 3 $info=array( 4 "user"=>array( 5 array(1,"zhangsan","nan"), 6 array(2,"lisi","nv"), 7 array(3,"wangwu","nan") 8 ), 9 "score"=>array( 10 array(1,100,90,80), 11 array(2,80,90,70), 12 array(3,60,50,86) 13 ), 14 "connect"=>array( 15 array(1,'110',"aaa@qq.com"), 16 array(2,'120',"bbb@qq.com"), 17 array(3,'119',"ccc@qq.com") 18 ) 19 ); 20 21 //输出bbb@qq.com 22 echo $info[connect][1][2]; 23 24 echo '<pre>'; 25 print_r($info); 26 echo '<pre>'; 27 ?>
3.使用其他函数声明
四.数组的遍历
1.使用for循环遍历数组
a.其它语言(只有这一种方式)
b.PHP中这种方式不是我们的首选
c.数组必须是索引数组,而且下标还必须是连续的
(索引数组下标还可以不连续,数组我们有时还要使用关联数组)
1 <?php 2 $user=array(1,"zhangsan",19,"nan"); 3 4 for($i=0;$i<count($user);$i++){ 5 echo "\$user[$i]=".$user[$i]."<br>"; 6 } 7 ?>
2.使用foreach语句循环遍历数组
foreach(数组变量 as 变量值){
//循环体
}
foreach(数组变量 as 下标变量=>值变量){
//循环体
}
a.循环次数由数组的元素个数决定
b.每一次循环都会将数组中的元素分别赋值给后面的变量
foreach 遍历一维数组
1 <?php 2 $user=array(1,"name"=>"zhangsan","age"=>19,"nan"); 3 4 foreach($user as $var){ //$var是自定义变量 5 echo $var."<br>"; 6 } 7 8 foreach($user as $key=>$var){ //$var是自定义变量 9 echo $key."---".$var."<br>"; 10 } 11 ?>
foreach遍历三维数组
1 <?php 2 //声明一个三维数组 3 $info=array( 4 "user"=>array( 5 array(1,"zhangsan","nan"), 6 array(2,"lisi","nv"), 7 array(3,"wangwu","nan") 8 ), 9 "score"=>array( 10 array(1,100,90,80), 11 array(2,80,90,70), 12 array(3,60,50,86) 13 ), 14 "connect"=>array( 15 array(1,'110',"aaa@qq.com"), 16 array(2,'120',"bbb@qq.com"), 17 array(3,'119',"ccc@qq.com") 18 ) 19 ); 20 21 //遍历三维数组 22 foreach($info as $tableName=>$table){ 23 echo '<table border="1" width="500" align="center">'; 24 echo '<caption><h1>'.$tableName.'</h1></caption>'; 25 foreach($table as $row){ 26 echo '<tr>'; 27 foreach($row as $col){ 28 echo '<td align="center">'.$col.'</td>'; 29 } 30 echo '</tr>'; 31 } 32 echo '</table>'; 33 } 34 ?>
3.while() list() each()组合循环遍历数组
each()函数
a.需要一个数组作为一个参数
b.返回来的也是一个数组
c.返回来的数组是0,1,key,value四个下标
0和key下标是当前参数数组元素的键
1和value下标是当前对数数组元素的值
d.默认当前元素就是第一个元素
e.每执行一次后就会将当前元素向后移动
f.如果到最后的元素再执行这个函数,则返回false
1 <?php 2 $user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan"); 3 4 $a=each($user); 5 print_r($a); //Array ( [1] => 1 [value] => 1 [0] => id [key] => id ) 6 7 echo "<br>"; 8 $b=each($user); 9 print_r($b); //Array ( [1] => zhangsan [value] => zhangsan [0] => name [key] => name ) 10 ?>
while和each()函数结合使用
1 <?php 2 $user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan"); 3 4 while($arr=each($user)){ 5 //echo $arr[0]."==>".$arr[1]."<br>"; 6 echo $arr[key]."==>".$arr[value]."<br>"; 7 } 8 ?>
list()函数
a.list()=array(); 需要讲一个数组赋值给这个函数
b.数组中的元素个数,要和list()函数中的参数个数相同
c.数组中的每个元素值会赋值list()函数中的每个参数,list()将每个参数转为变量。
d.list()只能接受索引数组
e.按索引下标的顺序
1 <?php 2 list($name,$age,$sex)=array("zhangsan","20","nan"); 3 4 echo $name."<br>"; 5 echo $age."<br>"; 6 echo $sex."<br>"; 7 8 $user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan"); 9 10 list($key,$value)=each($user); 11 echo $key."-->".$value; 12 ?>
使用数组的内部指针控制函数
next(数组); 指针移动到下一个,并返回当前元素的值
prev(数组); 指针移动到上一个,并返回当前元素的值
rest(数组); 指针移动到头一个
end(数组); 指针移动到最后一个
current(数组); 获取当前元素的值
key(数组); 获取当前元素的键
while()、list()、each()结合使用
1 <?php 2 $user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan"); 3 4 while(list($key,$value)=each($user)){ 5 echo $key."==>".$value."<br>"; 6 } 7 reset($user); 8 next($user); 9 echo prev($user); 10 ?>
五.预定义数组
自动全局变量
1.包含了来自web服务器,客户端,运行环境和用户输入的数据
2.这些数组比较特别,全局范围内自动生效,都可以直接使用这些数组。
3.用户不能自定义这些数组,但这些数据操作方式又和我们自定义的数组操作方式一样
4.在函数中直接可以使用这些数组
$_GET 经由URL请求提交至脚本的变量
$_POST 经由HTTP POST方法提交到脚本的变量
$_REQUEST 经由GET POST COOKIE机制提交到脚本的变量,因此该数组并不值得信任,尽量不要使用。
$_FILES 经由HTTP POST文件上传而提交至脚本
$_COOKIE 会话控制
$_SESSION 会话控制
$_ENV 执行环境提交脚本的变量
$_SERVER 变量由web服务器设定的或直接和当前脚本的执行环境相关联
$GLOBALS 只要是当前脚本有效的变量都在这里,数组的键名为全局变量的名称