首页 > php教程 > 正文

PHP foreach的两种用法 as $key => $value

原创 2018-04-17 16:16:50 0 40
赞助会员专享特权
这篇文章介绍的内容是关于PHP foreach的两种用法 as $key => $value,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

一 foreach的语法介绍

PHP 4以上的版本包括了 foreach 结构,这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种是第一种的有用的扩展。


1

2


foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement


第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只是除了当前单元的值以外,键值也会在每次循环中被赋给变量 $key。看下面代码:


1

2

3

4

5

6

7

8

9


$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
echo $key."=>".$value."\n";
}
结果如下:
1=>111
2=>222
3=>333


键值这里可以理解为数组下标,数组元素a[2]的下标就是2.


当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。而while循环需要reset。下面两种代码功能完全相同。

1.用while循环


1

2

3

4

5


$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}


2.用foreach


1

2

3


foreach ($arr as $value) {
echo "Value: $value<br>\n";
}


此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。

foreach 不支持用“@”来禁止错误信息的能力。

二 PHP foreach 小结

1.foreach 中使用引用的情况。



普通情况下,foreach($arr as $value)中的$arr和$value是拷贝,不受外部影响的,即


1

2

3

4

5

6

7

8

9


$arr = array(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
echo $value;
}



结果是:12345

但如果$arr是引用的话,情况则不同了,我们用代码来说明问题


1

2

3

4

5

6

7

8

9

10

11


$arr = array(0,1,2,3,4,5);
$arr = &$arr;
foreach($arr as $value){
$arr = array();
echo $value;
}


结果是: 0

这是因为循环用的$arr是直接指向原数据的,而不是copy了一份。

如果$value是引用,而$arr不是引用,其结果是一样的,同样$value是指向原数据的而不是copy


1

2

3

4

5

6

7

8

9


$arr = array(0,1,2,3,4,5);
foreach($arr as &$value){
$arr = array();
echo $value;
}


结果是: 0

还有一种情况比较特殊,即是如果定义了$arr为全局变量的话,$arr也会变成引用


1

2

3

4

5

6

7

8

9

10

11


global $arr;
$arr = array(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
echo $value;
}


结果是: 0

2. 如果两次循环一个数组,一定不能这样写


1

2

3


foreach($arr as &$value){}
foreach($arr as $value){}


这会导致第二次的循环的结果不正确(可能是php的bug吧)。可以用以下几种来代替:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21


//solution 1
foreach($arr as &$value){}
unset($value);
foreach($arr as $value){}
//solution 2
foreach($arr as &$value){}
foreach($arr as &$value){}
//solution 3
foreach($arr as &$value){}
$arr2 = $arr;
foreach($arr2 as $value){}


相关推荐:

详解PHP中foreach的用法和实例

以上就是PHP foreach的两种用法 as $key => $value的详细内容,更多请关注php中文网其它相关文章!

  • 相关标签:foreach value php
  • 本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • 相关文章


  • PHP如何安装和配置?
  • php 和 python 语法(部分)上的区别
  • PHP 随机数 C扩展随机数
  • PHP查询附近的人及其距离的实现方法_php技巧
  • 网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
    独孤九贱(4)_PHP视频教程

    独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    独孤九贱(5)_ThinkPHP5视频教程

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    独孤九贱(1)_HTML5视频教程

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    ThinkPHP5实战之[教学管理系统]

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    PHP入门视频教程之一周学会PHP

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    相关视频教程

  • javascript初级视频教程 javascript初级视频教程
  • jquery 基础视频教程 jquery 基础视频教程
  • javascript三级联动视频教程 javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程
  • 相关视频章节