工作中遇到一个 BUG,检查到最后发现是对“引用”的不小心使用导致的,结果是一个 array 的最后两个元素变成相同的了。为了突出主要问题,我把程序的简化形式写在下面。有兴趣的童鞋可以想一想为什么会导致那样的结果。
$list = array(1,2,3);
foreach ( $list as &$item ) {
$a = $item;
}
//unset($item); // 正确的用法,应该是加上这句。
foreach ( $list as $item ) {
$a = $item;
}
var_dump($list); // 输出的是 { 1, 2, 2 ],有趣吧?
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
$list = array(1,2,3);
foreach ( $list as &$item ) {
$a = $item;
}
//unset($item); // 正确的用法,应该是加上这句。
foreach ( $list as $item ) {
$a = $item;
}
var_dump($list); // 输出的是 { 1, 2, 2 ],有趣吧?
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
解决方案 »
- 自己粗糙的理解的PHP面向对象化,还有一些不懂得地方大家发表一下自己的意见!
- PHP服务器获取客户IP地址时,当通过代理服务器和网关后可不可以取得最终用户的ip
- PHP代码解释
- 请教
- 本机是好的。。。传上服务器去就错了。这是为什么啊。
- phpMyAdmin 里面插入中文的时候。出来 的全是“?”请那位高手帮忙。在这谢了。。
- 关于汉字简繁编码小问
- win98+apache+php的安装问题(200分,求助,搞不出来我急)
- 这个图片下载的程序怎么做?
- php在哪里能设置默认显示页,例如index.htm而不用在路径后再输入index.htm
- 在ubuntu下,mkdir创建不了文件夹
- php 如何判断时间连续性?
$item = & $list[2];//第一次foreach就是这个意思,$item引用数组最后一个元素;
//unset($item); // 正确的用法,应该是加上这句。
foreach ( $list as $item ) {//第一次$item被赋予1,则$list[2]相应的值也变成了1,以此类推..
break;
//$a = $item;
}//var_dump($list); // 输出的是 { 1, 2, 2 ],有趣吧?
var_dump($list);//因为前面的break,这回变成[1,2,1]了。
赞个。。
决定仔细看一下程序。
一查发现手册上好大一个红框,
配合2L解释.
$list = array(1,2,3);
foreach ( $list as &$item ) {
}// 这时$item指向$list[2]
foreach ( $list as $item ) {
// 第一次 这时$list[0] = 1。 所以$list[2]=1 $list = array(1,2,1);
// 第二次 这时$list[1] = 2。 所以$list[2]=2 $list = array(1,2,2);
// 第三次 这时$list[2] = 2。 所以$list[2]=2 $list = array(1,2,2);
}
print_r($list); // 1,2,2
这么理解。正确吗?
$list = array(1,2,3,4);
foreach ( $list as &$item ) {
}// 这时$item指向$list[3]
foreach ( $list as $item ) {
// 第一次 这时$list[0] = 1。 所以$list[3]=1 $list = array(1,2,3,1);
// 第二次 这时$list[1] = 2。 所以$list[3]=2 $list = array(1,2,3,2);
// 第三次 这时$list[2] = 3。 所以$list[3]=3 $list = array(1,2,3,3);
// 第三次 这时$list[3] = 3。 所以$list[3]=3 $list = array(1,2,3,3);
}
print_r($list); // 1,2,3,3
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)