PHP中的一个”坑“,PHP"坑"
说一个极有可能在工作中遇到的问题——foreach的引用
<span>$arr</span> = <span>range</span>(1,3<span>); </span><span>//</span><span>[1,2,3]</span> <span>foreach</span>(<span>$arr</span> <span>as</span> &<span>$val</span><span>) { } </span><span>foreach</span>(<span>$arr</span> <span>as</span> <span>$val</span><span>) { } </span><span>print_r</span>(<span>$arr</span><span>); </span>
上面这段代码输出什么呢,神奇的竟然是下面这样,这个我在工作中遇到过一次,当时弄了半天没弄出个所以然,只是找到了解决办法,这个问题解决办法有两个:
<span>Array</span><span> ( [</span>0] => 1<span> [</span>1] => 2<span> [</span>2] => 2<span> )</span>
下面这两种方式都可以解决上面这个问题:
<span>//</span><span>方法1</span> <span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) { } </span><span>unset</span>(<span>$value</span><span>); </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$value</span><span>) { } </span><span>print_r</span>(<span>$arr</span><span>); </span><span>//</span><span>[1,2,3] //方法2</span> <span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) { } </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$val</span><span>) { } </span><span>print_r</span>(<span>$arr</span><span>); </span><span>//</span><span>[1,2,3] //方法3</span> <span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) { } </span><span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) { } </span><span>print_r</span>(<span>$arr</span><span>); </span><span>//</span><span>[1,2,3]</span>
方法1在官方的手册中也可以看到http://php.net/manual/en/control-structures.foreach.php,文章中专门有个tips提示这一点$var = 123; $tmp = &$var; $tmp = 200; echo $var; //200
看看下面这张盗来的图(哈哈,原文链接贴在下面),对上面这个更好的理解
php $arr1 = array("a" => 1, "b" => 2, "c" => 3); $arr2 = array("x" => 4, "y" => 5, "z" => 6); foreach ($arr1 as $key => &$val) {} foreach ($arr2 as $key => $val) {} var_dump($arr1); var_dump($arr2); ?> The output is: array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> &int(6) } array(3) { ["x"]=> int(4) ["y"]=> int(5) ["z"]=> int(6) }
参考文章:
http://www.cnblogs.com/CraryPrimitiveMan/p/4030748.html#3085766
http://www.jb51.net/article/39299.htm
本文版权归作者iforever(luluyrt@163.com)所有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。