php ​foreach遍历关联数组

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

我们运行一下看看结果:

QQ截图20161114131911.png

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

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

}

?>

运行看一下结果:

QQ截图20161114131954.png

按照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','妖人'),
   ),
);
?>

遍历显示出来,效果如下:

QQ截图20161114132027.png

总结:

    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','妖人'), ), ); ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

php入门教程之一周学会PHP

  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载
泡泡

泡泡

foreach($arr as $key => $value){ echo $key.'<br>'; foreach($value as $values){ foreach($values as $key => $v){ echo $v; } }

1年前    添加回复 1

回复
Apollo

Apollo

答案 foreach ($arr as $value){ foreach($value as $value){ foreach ($value as $value) { echo $value."\n"; } }

3个月前    添加回复 0

回复
reset

reset

卧槽,人妖都出来了。。。

8个月前    添加回复 0

回复
谢单单

谢单单

foreach($arr as $k => $v){ echo $k.'<br>'; foreach($v as $kk => $vv){ foreach($vv as $kkk => $vvv){ echo $vvv.','; } echo '<br /&

8个月前    添加回复 0

回复
简单

简单

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

9个月前    添加回复 0

回复
简单

简单

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

9个月前    添加回复 0

回复
peach

peach

李某18人妖 高某20男 张某21妖人 ---------教学部分割线---------- 李某18人妖 高某20男 张某21妖人 ---------宣传部分割线---------- 李某18人妖 高某20男 张某21妖人 ---------财务部分割线----------

10个月前    添加回复 0

回复
手机用户422910559

手机用户422910559

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

11个月前    添加回复 0

回复
手机用户422910559

手机用户422910559

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

11个月前    添加回复 0

回复
′─╄Ab君

′─╄Ab君

$arr=array( '教学部'=>array( array('姓名'=>'李某','年龄'=>'18','性别'=>'人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖

1年前    添加回复 0

回复
陶小陶

陶小陶

foreach($arr as $key=>$item){ echo "---------".$key."---------<br>"; foreach($item as $i){ foreach($i as $key=>$a){ echo $a; }

1年前    添加回复 0

回复
陈海斌

陈海斌

李某 18 人妖 ----------分割线----------- 高某 20 男 ----------分割线----------- 张某 21 妖人 ----------分割线----------- 李某 18 人妖 ----------分割线----------- 高某 20 男 ----------分割线----------- 张某 21 妖人

1年前    添加回复 0

回复
陈海斌

陈海斌

foreach($arr as $value){ foreach($value as $k){ foreach($k as $b){ echo $b.'<br />'; } echo '----------分割线-----------<br />'; } }

1年前    添加回复 0

回复
陈威

陈威

输出结果: 李某,18,人妖, 高某,20,男, 张某,21,妖人, ----------分割线----------- 李某,18,人妖, 高某,20,男, 张某,21,妖人, ----------分割线----------- 李某,18,人妖, 高某,20,男, 张某,21,妖人, ----------分割线----------

1年前    添加回复 0

回复
慕言

慕言

foreach($arr as $a => $b){ echo $a. "<br />"; foreach($b as $c => $d){ foreach($d as $f => $g){ echo $g."&nbsp;&nbsp;&nbsp;&q

1年前    添加回复 0

回复

答案呢?

[最新 reset 的回答]问一下,第一个循环我知道$bum=>$b是键值对(xx部门=>[某某人,年龄,性别)。 那第二个循环把这个$b赋值给$bh=>$ren是对应哪里的?第三个循环我也懵了。。。求解答

时间:10个月前

求作业答案啊

[最新 咸鱼 的回答]

时间:1年前

分割线那条的执行顺序

[最新 sky 的回答]真心不明白你想干什么

时间:1年前

foreach 跟 for 循环有什么不一样?

[最新 阿神 的回答]// for 循环   // foreach 循环 foreach循环主要用于数组的遍历,它的写法相比for循环要简洁很多。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。

时间:2年前

foreach($data as $key => $value)这里的as是什么意思?

[最新 lizheng13738051517 的回答]这是一种语法格式, 目的是告诉解析器 ,你的按照我这样的方式来解析  比如这个例子 foreach($data as $key => $value) 就是说 你的按照键值对的方式去解析

时间:2年前

$key=>$value这句话什么意思,求解释?

[最新 数据分析师 的回答]$key=>$value这句话什么意思,求解释?-PHP中文网问答-$key=>$value这句话什么意思,求解释?-PHP中文网问答围观一下哦,学习一下。

时间:2年前

挪威的森林

挪威的森林

foreach( 要循环的数组变量 as [键变量 =>] 值变量),键变量是可选项

1个月前 0

挪威的森林

挪威的森林

数组下标索引可以用$key,值为$value

1个月前 0

雨觞

雨觞

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach($arr as $dept){ foreach($dept as $name){ foreach($name as $k=>$people){ if($k==0){ $k="姓名"; echo $k."--------".$people."<br>"; } if($k==1){ $k="年龄"; echo $k."--------".$people."<br>"; } if($k==2){ $k="性别"; echo $k."--------".$people."<br>"; } } echo "-------分割线--------"."<br>"; } } ?>

1个月前 0

rock

rock

<?php $zuoye = [ '教学部' => [ ['李某','18','人妖'], ['高某','18','男'], ['张某','18','女'] ], '宣传部' => [ ['李某','18','人妖'], ['高某','18','男'], ['张某','18','女'] ], '财务部' => [ ['李某','18','人妖'], ['高某','18','男'], ['张某','18','女'] ], ]; foreach ($zuoye as $value) { # code... foreach ($value as $valueer) { # code... foreach ($valueer as $key => $valuesan) { # code... echo $key.'---------'.$valuesan.'<br />'; } } echo '<hr />'; }; ?>

4个月前 0

桃子味伏特加

桃子味伏特加

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach($arr as $key=>$value){ echo '<br/>'.$key; echo '</br>'.'------------------------------'; foreach($value as $dier){ echo'</br>'; foreach($dier as $disan){ echo $disan.'----'; } } } ?>

5个月前 0

小野呀

小野呀

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach($arr as $key=>$value){ echo $key; foreach ($value as $k => $v) { echo "<br>"; foreach ($v as $a=>$b) { echo $b."-"; } } echo "<br>-------------------------------------------<br>"; } ?>

7个月前 0

谢单单

谢单单

foreach($arr as $k => $v){ echo $k.'<br>'; foreach($v as $kk => $vv){ foreach($vv as $kkk => $vvv){ echo $vvv.','; } echo '<br />'; } echo '----------分割线-----------<br />'; }

8个月前 0

城南花已开

城南花已开

$arr[财务部][4]=['石某','60','老人']; unset($arr[宣传部][2]); $arr[教学部][0][2]='女'; foreach($arr as $key=>$value){ echo $key.'<br/>'; foreach($value as $k=>$v){ foreach($v as $a=>$b){ echo $b; } echo '<br/>'; } echo '------分割线------'.'<br/>'; } echo '</table>';

8个月前 0

筱笋尖

筱笋尖

foreach($arr as $bum => $b){ echo $bum.'<br />'; foreach($b as $bh => $ren){ echo $bh.'--'; foreach($ren as $xx){ echo '-'.$xx; } echo '<br />' ; } }

8个月前 0

简单

简单

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach($arr as $key => $value){ echo "<h2>".$key."</h2></br>"; foreach($value as $k => $v){ for($i=0;$i<count($v);$i++){ echo $v[$i]." "; } echo "</br>"; } } ?>

9个月前 0

简单

简单

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach($arr as $key => $value){ echo "<h2>".$key."</h2></br>"; foreach($value as $k => $v){ for($i=0;$i<count($v);$i++){ echo $v[$i]." "; } echo "</br>"; } } ?>

9个月前 0

peach

peach

foreach( $arr as $y =>$v){ foreach($v as $k ){ echo '<br>'; foreach($k as $a){echo $a; }; }; echo '<br>'.'---------'.$y.'分割线----------'.'<br>'; };

10个月前 0

waiting for.

waiting for.

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach($arr as $k=>$value){ echo $k.'<br/>'; foreach($value as $k2=>$v){ echo '<br/>'; foreach($v as $k3=>$v3){ echo $k3.'-----'.$v3.'<br/>'; } } echo '---------分割线-----------<br/>'; } ?>

11个月前 0

No.1

No.1

遍历关联数组 用foreach($data as $key=> $value){ echo$key.'--------'.$value.'</br>'; }

1年前 0

fighting&it'sme

fighting&it'sme

按照foreach的结果推理与刚刚做的关联数组的结果是一样的。 不同的是不连续的索引数组。每读一次数组的元素,将当次循环的下标赋值给了变量$k,值赋值给了变量$v。每读将键和值输出,然后显示出来。循环一次向后移动一次下标。读取至最后,退出执行。 总结: 第一次循环的时候,将数组赋值给了$value,然后用foreach循环$value。将二维的子数组中的键给到$k,值赋值给变量$v。 第一次循环退出子数组的循环,执行后续代码显示分割线。 依此类推,第二次循环也是这样。

1年前 0

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~
第八期线上培训班