数组
练习在最后
数组概述
概述与定义
-
数组中存储键值对
数组实际上是一个有序映射 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 修改为 60 echo "<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>";
?>
效果