返回介绍

6.2.3 foreach 遍历关联数组

发布于 2025-01-30 22:11:33 字数 3464 浏览 0 评论 0 收藏 0

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 />';
}
*/
?>

我们运行一下看看结果:
document/2015-09-03/55e8282b9e0ec

通过上面的运行结果我们得出下面的结果:

  1. 每次循环的时候,把下标赋值给了变量$key,把值的变量赋值给了变量$value
  2. 循环一次读一次键和值。如上例中,读完“凤姐”再读取“芙蓉”,读到最后,发现没有可以读取的数组元素后,停止循环遍历数据。

注意:$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 />';

}

?>

运行看一下结果:

document/2015-09-03/55e82e9ff2b4c

按照 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 />';

}

?>

结果就出来了哟:
document/2015-09-03/55e836a05789c

总结:

  1. 第一次循环的时候,将数组赋值给了$value,然后用 foreach 循环$value。将二维的子数组中的键给到$k,值赋值给变量$v。
  2. 第一次循环退出子数组的循环,执行后续代码显示分割线。
  3. 依此类推,第二次循环也是这样。

作业

将如下数组:

<?php
$arr=array(
'教学部'=>array(
  array('李某','18','人妖'),
  array('高某','20','男'),
  array('张某','21','妖人'),
),
'宣传部'=>array(
  array('李某','18','人妖'),
  array('高某','20','男'),
  array('张某','21','妖人'),
),
'财务部'=>array(
  array('李某','18','人妖'),
  array('高某','20','男'),
  array('张某','21','妖人'),
),
);
?>

遍历显示出来,效果如下:
document/2015-09-03/55e83877dbd0f

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文