foreach的基本语法
我们通过上一章的内容学会了遍历连续下标的索引数组。可是,我们发现我们遍历不了关联数组,也遍历不了下标不连续的索引数组。
那我们其实在学循环的时候,有一个布尔型循环是专门用来循环数组的。这个循环的基本语法就是foreach基本语法。
语法格式如下:
foreach( 要循环的数组变量 as [键变量 =>] 值变量){
//循环的结构体
}
遍历关联数组
这是一个固定用法,将要循环的数组放进去。
as 是一个固定的关键字
后面的键变量是可选的,随意定义一个变量,每次循环的时候,foreach这个语法会把键取出来赋值到键变量里面
后面的值变量是必填的。每次循环的时候,会把值放到值变量里面。
我们下面用代码来举例子,加强对这个语法的理解。
<?php
$data = [
"fj" => "凤姐",
"fr" => "芙蓉",
];
foreach($data as $key => $value){
echo $key . "-------" . $value . "<br />";
}
//如果我们只想读取值的话,就可以把下面的$key => 给删除掉,读取的时候,就只读取值了。做完上面的实验,你可以打开下面的代码再实验几次。
/*
foreach($data as $value){
echo $value . "<br />";
}
*/
?>
我们运行一下看看结果:
通过上面的运行结果我们得出下面的结果:
- 每次循环的时候,把下标赋值给了变量$key,把值的变量赋值给了变量$value
- 循环一次读一次键和值。如上例中,读完“凤姐”再读取“芙蓉”,读到最后,发现没有可以读取的数组元素后,停止循环遍历数据。
注意:$key 和$value并不是变量名必须得为这两个名字。你命名为其他的也可以,如 $kai => $wen是一样的。 你要清楚键赋值给了哪个变量,值赋值给了另外的哪个变量。
遍历索引数组
foreach还挺好学的。因此,我们可以通过foreach遍历连续的索引数组,如下例:
<?php
$data = array(
0 => "中国",
100 => "美国",
20 => "韩国",
300 => "德国",
);
//待会儿可以自己做做实验,循环遍历一下下面的这个数组
//$data = array(1,2,3,4,5,6,7,8,9,10);
foreach($data as $k => $v){
echo $k . "------" . $v ."<br />";
}
?>
运行看一下结果:
按照foreach的结果推理与刚刚做的关联数组的结果是一样的。
不同的是不连续的索引数组。每读一次数组的元素,将当次循环的下标赋值给了变量$k,值赋值给了变量$v。每读将键和值输出,然后显示出来。循环一次向后移动一次下标。读取至最后,退出执行。
遍历多维数组
数组当中还有一个数组我们该怎么遍历呢?我们来做一个实验:
<?php
$data = array(
0 => array(
"中国" => "china",
"美国" => "usa",
"德国" => " Germany",
),
1 => array(
"湖北" => "hubei",
"河北" => "hebei",
"山东" => "shandong",
"山西" => "sanxi",
),
);
//注:我们在使用foreach循环时,第一次循环将键为0和键为1的两个数组赋值给一个变量($value)。然后,再套一个循环遍历这个$value变量,$value中的值取出来,赋值给$k和$v。
foreach($data as $value){
//第一次循环把国家的数组赋值给了$value
//第二次循环把中国的省份的数组又赋值给了$value
//因此,我在循环的时候把$value再遍历一次
foreach($value as $k => $v){
echo $k . "-----" . $v ."<br />";
}
//为了看的更清晰,我在中间加上华丽丽的分割线方便你来分析
echo "----------分割线-----------<br />";
}
?>
结果就出来了哟:
总结:
- 第一次循环的时候,将数组赋值给了$value,然后用foreach循环$value。将二维的子数组中的键给到$k,值赋值给变量$v。
- 第一次循环退出子数组的循环,执行后续代码显示分割线。
- 依此类推,第二次循环也是这样。
作业
将如下数组:
<?php
$arr=array(
"教学部"=>array(
array("李某","18","人妖"),
array("高某","20","男"),
array("张某","21","妖人"),
),
"宣传部"=>array(
array("李某","18","人妖"),
array("高某","20","男"),
array("张某","21","妖人"),
),
"财务部"=>array(
array("李某","18","人妖"),
array("高某","20","男"),
array("张某","21","妖人"),
),
);
?>
遍历显示出来,效果如下: