php ​foreach遍历关联数组

关注取消关注

章节
笔记
提问

php入门教程之一周学会PHP

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','妖人'), ), ); ?>
提交重置代码
0/300
  • foreach($arr as $key => $value){ echo $key.'
    '; foreach($value as $values){ foreach($values as $key => $v){ echo $v; } }
    时间: 2018-03-25  1
  • array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'),
    时间: 2018-05-10  0
  • array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'),
    时间: 2018-05-10  0
  • 需要注意的是foreach($data as $key=>$value)和foreach($data as $value)是不一样的, 对于第一句每一次循环,data都将一个元素的下标赋值给$key,而将 元素的值赋值给$value,而第二句每一次循环data都将一个元素赋值给$value。
    时间: 2018-03-14  0
  • foreach ($arr as $key => $value){ echo $key.'
    '; foreach ($value as $key => $value1 ){ foreach ($value1 as $key => $value2){ echo $key .'-------'.
    时间: 2018-03-11  0
  • foreach ($arr as $key => $value) { $a = $value; echo "
    $key "; foreach ($a as $key => $value) { $b = $value; echo "
    "; foreach ($b
    时间: 2018-02-10  0
  • foreach($arr as $k1 => $v1){ echo $k1.'
    -----
    '; foreach($v1 as $v2){ foreach($v2 as $v3){ echo $v3.','; } echo '
    时间: 2017-12-29  0
  • foreach($arr as $a) {foreach($a as $b) {foreach($b as$x=>$y) {echo $x.'----'.$y.'
    ';}} echo'-------分割线------
    '; }
    时间: 2017-12-11  0
  • foreach($arr as $a) {foreach($a as $b) {foreach($b as$x=>$y) {echo $x.'~~~'.$y.'
    ';}}}
    时间: 2017-12-11  0
  • foreach($arr as $a1){ foreach($a1 as $a2){ foreach($a2 as $k => $v) { echo $k . '-----' . $v .'
    '; } }
    时间: 2017-12-04  0
  • 更正:echo $arr1 . "----" . $arr5 ."
    ";
    时间: 2017-10-25  0
  • foreach($arr as $arr1 =>$arr2){ foreach($arr2 as $arr3){ foreach($arr3 as $arr4 => $arr5){ each $arr2 . "-----" . $arr5 . "
    "; }
    时间: 2017-10-25  0
  • foreach($arr as $arr1){ foreach($arr1 as $arr2){ foreach($arr2 as $arr3=>$arr4){ echo $arr3."-----".$arr4."
    "; } } };
    时间: 2017-10-18  0
  • 几组数组,就foreach几次。
    时间: 2017-09-25  0
  • 怎么获取¥arr这个数组name这一列呢
    时间: 2017-08-18  0
  • foreach($arr as $k=>$v){ echo $k.'
    '; foreach($v as $ke=>$va){ foreach($va as $key=>$value){ echo $value.'--'; } echo '
    '; } }
    时间: 2017-08-04  0
  • foreach($arr as $value){ foreach($value as $v){ foreach($v as $key=>$value ){ echo $key.'-----'.$value.'
    '; } } echo '--------'.'
    时间: 2017-07-17  0
  • $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'),
    时间: 2017-07-17  0
  • foreach($arr as $a){ foreach($a as $b){ foreach($b as $d=>$c){ echo $d."=>".$c; } } }
    时间: 2017-05-24  0
  • array( array('1李某','18','人妖'), array('1高某','20','男'), array('1张某','21','妖人'), ), '宣传部'=>array( array('2李某','18','人妖'),
    时间: 2017-05-24  0
首页上一页12下一页尾页

PHP中文网

未登录