顾名思义,foreach是for each的连写,不是for reach。意思就是对数组中的每个元素都要处理一次。
foreach只能用来处理数组。
有两种用法,先看第一种。
foreach(array as $value) { func(); }
解释一下上面的代码,既然foreach是用来处理数组的,那么肯定需要指定一个数组的名字,array就是存放数组名字的一个变量。后面的value变量是什么意思呢?由于foreach是要对数组中的每个元素都要处理一次,那么你肯定需要一个变量来存放数组中的元素,要不你怎么处理数据呢?OK,我们解释了array和value存在的意义,接着看一下foreach的执行逻辑。
foreach第一次执行的时候,已经有一个指针指向了array的第一个元素,然后把第一个元素取出来赋予给value变量,接下来开始执行循环体中的代码,在循环体中就可以用value变量中的值了,执行完循环体代码之后,PHP将指针移动到了下一个元素,然后就和之前的过程一样了,就这样一个一个的把数组中的元素取出来放到value中,在循环中你想用这个value的值你就用,不想用的话,下次循环值也被覆盖掉,直到指针移动到了数组的最后一个元素,这个指针就不移动了。
<?php $names = array('chinese','math','english'); foreach($names as $temp) { echo $temp . '<br>'; } ?>
再看第二种。
foreach(array as $key =>$value) { func(); }
第二种是用于关联数组的。对于关联数组我们比较关心它中的每个元素的名字和值,所以在foreach中需要两个变量来存放取得的每个元素的名字和值,key和value就是这两个变量,每次循环取得的元素名字和元素的值都被分别存放在key变量中和value变量中。
1 <?php 2 3 $names =array('a'=>'chinese','b'=>'math','c'=>'english'); 4 5 foreach($names as $temp1 => temp2) 6 { 7 echo $temp1 . '=>'. $temp2 . '<br>'; 8 9 } 10 11 ?>