数组
练习在最后
数组概述
概述与定义
-
数组中存储键值对
数组实际上是一个有序映射 key-value,可将其当成真正的数组、列表(向量)、散列表、字典、集合、栈、队列等
-
数组中的元素可以是任意类型的数据对象(可以嵌套数组)
-
输出数组时不能使用
echo
语句,可以使用print_r()
函数代替 -
在
<?php?>
标签前加<pre>
标签可格式化输出 -
解决中文乱码问题,在页面 头部加标签
<meta charset = "utf-8">
-
定义数组(array)
$stu[]
<?php$name = "zhangsan";$age = 18;$score = 59.9;$sex = true;$stu[] = $name;$stu[] = $age;$stu[] = $score;$stu[] = $sex;print_r($stu);print_r("<br />");print_r($stu[1]);print_r("<br />");var_dump($stu);?>
数组特点
- 键值对(key-value)
- 键,key,存储在数组中,变量的编号(0 开始)
- 值,value,存储在 数组中,变量的值
- 数组中的元素可以是任意类型的数据对象
- 复合数据类型,非线性(一个数组对应多个值)
数组分类
-
索引数组
变量的"编号"是整数,整数不具备一定的语义
-
关联数组
变量的"编号"用字符串表示,可以具备一定的语义
-
不指定键名时默认为索引数组
<?php$name = "zhangsan";$age = 18;$score = 59.9;$sex = true;$stu['name'] = $name;$stu['age'] = $age;$stu['score'] = $score;$stu['sex'] = $sex;print_r($stu);print_r("<br />");print_r($stu['score']);print_r("<br />");var_dump($stu);?>
数组的创建
直接赋值
-
语法
$变量名称[]=数据; // 创建索引数组 $变量名称[key]=数据; // 创建关联数组
-
创建第二个学生信息
<?php$stu2['name']="lisi";$stu2['sex']=false;$stu2['age']=22;$stu2['score']=99.9;echo "<pre>";// <pre>保持文本格式的预格式化文本标签var_dump($stu2);?>
array 结构
-
语法
$变量 = array(变量1,变量2,...); //或 $变量 = array('key1' => value1,'key2' => value2,... )
-
创建第三个学生信息
<?php$stu3 = array("wangwu",true,25,0);echo "<pre>";var_dump($stu3);?>
-
创建第四个学生信息
<?php$stu4 = array('name' => "july",'sex' => true,'age' => 23,'score' => 46 );echo "<pre>";print_r($stu4);?>
输出
-
print_r()
与echo
类似当输出为 bool 类型的 true 时,输出 1
当输出为 bool 类型的 false 时,不输出
<?php$test[] = false;$test[] = true;print_r($test);print_r('<br />');var_dump($test);?>
多维数组
- 数组中的元素可以是任何类型的数据,当数组中的元素为数组时为多维数组
多维数组创建–一个班四个学生为例
-
一个班四个学生的信息
-
定义完学生数组再定义班级数组,先定义数组内元素的数组
<?php$stu1 = array('name' => "zhangsan",'sex' => true,'age' => 23,'score' => 46 );$stu2 = array('name' => "lisi",'sex' => false,'age' => 22,'score' => 89 );$stu3 = array('name' => "wangwu",'sex' => true,'age' => 26,'score' => 59.9 );$stu4 = array('name' => "jucy",'sex' => false,'age' => 19,'score' => 98 );$class = array($stu1,$stu2,$stu3,$stu4);echo "<pre>";print_r($class);?>
数组元素的操作
数组元素的访问
-
通过
key
找到数组中的value
<?php$stu1 = array('name' => "zhangsan",'sex' => true,'age' => 23,'score' => 46 );echo "<pre>";echo "zhangsan's score is {$stu1['score']}";// 引号中的变量要用 {} 括起来 ?>
-
多维数组的访问
<?php$stu1 = array('name' => "zhangsan",'sex' => true,'age' => 23,'score' => 46 );$stu2 = array('name' => "lisi",'sex' => false,'age' => 22,'score' => 89 );$stu3 = array('name' => "wangwu",'sex' => true,'age' => 26,'score' => 59.9 );$stu4 = array('name' => "jucy",'sex' => false,'age' => 19,'score' => 98 );$class = array($stu1,$stu2,$stu3,$stu4);echo "<pre>";echo "zhangsan's score is {$class[0]['score']}";?>
元素操作
-
读取:通过
key
捕获数组中的value
-
修改、增加,直接赋值
-
删除:PHP中删除数组元素意义不大,可置之不理
<?php$stu1 = array('name' => "zhangsan",'sex' => true,'age' => 23,'score' => 46 );$stu1['score'] = 60;// 将原成绩 46 修改为 60echo "<pre>";print_r($stu1);?>
数组的遍历(循环)
- 数组中的每个元素都访问一次
for 循环
-
缺点:使用 for 循环遍历数组依赖
key
元素的自然数规律(索引数组) -
索引数组遍历
<?php$stu = array("wangwu",true,25,0);echo "<pre>";for($i = 0 ; $i < count($stu) ; $i++){// count($stu) 计算数组长度echo $stu[$i]."<br />";}?>
foreach 语句
-
foreach 语法结构 提供了数组遍历的简单方式
-
foreach 这种语言结构是专门来遍历数组的,foreach 是一种循环,不需要额外计时器(数组中有多少个元素,循环就执行多少次)
-
基本结构
遍历值
foreach($arr as $key){echo $key; }
foreach($arr as $key => $value){// 代码块 }
<?php$stu = array('name' => "lisi",'sex' => false,'age' => 22,'score' => 89 );foreach($stu as $key => $value){echo $value."<br />";}?>
-
访问键值对
<?php$stu = array('name' => "lisi",'sex' => false,'age' => 22,'score' => 89 );foreach($stu as $key => $value){echo $key."=>".$value."<br />";}?>
-
多维数组遍历
<?php$stu1 = array('name' => "zhangsan",'sex' => true,'age' => 23,'score' => 46 );$stu2 = array('name' => "lisi",'sex' => false,'age' => 22,'score' => 89 );$stu3 = array('name' => "wangwu",'sex' => true,'age' => 26,'score' => 59.9 );$stu4 = array('name' => "jucy",'sex' => false,'age' => 19,'score' => 98 );$class = array($stu1,$stu2,$stu3,$stu4);echo "<pre>";foreach($class as $k => $v){foreach($v as $key => $value){// 取 $class 数组的 value(内部数组名)echo $value."<br />";}echo '<br />';}?>
-
注意
-
foreach 是用来遍历数组的循环语言结构,数组中有多少个元素,该语言结构就会循环执行几次
-
foreach 语言结构中,临时变量的名字可以变化,但是语言结构不能改变
foreach($class as $k => $v){} // 上述代码中 $k 和 $v 中 $后的变量名 可以任意命名 // 但 => 不可改变 // $class 为要遍历的目标数组
-
练习
将班级内的成员属性以表格形式输出
<meta charset='utf-8'>
<pre>
<?php$stu1 = array("name"=> "zhangsan","sex"=> "1","age"=> "18","score"=> "99.99") ;$stu2 = array("name"=> "lisi","sex"=> "0","age"=> "19","score"=> "59.99") ;$stu3 = array("name"=> "wangwu","sex"=> "1","age"=> "18","score"=> "60") ;$stu4 = array("name"=> "zhaoliu","sex"=> "1","age"=> "23","score"=> "65") ;$class = array($stu1,$stu2,$stu3,$stu4) ;echo "<table border=1>";echo"<tr ><td colspan = '4' align='center'>学生信息</td></tr>";echo "<tr><td>姓名</td><td>性别</td><td>年龄</td><td>成绩</td></tr>";foreach($class as $k => $v) {// $class 的 $value 值为 class 内的多个 stu数组echo "<tr>";// 循环到每个 student 时建立一行表格foreach($v as $key => $value) {echo "<td>";// 循环到每个 stu 的每个属性时建立一个单元格echo $value;echo "</td>";}echo "</tr>";
}
echo "</table>";
?>
效果