100, "age" => 18);$arr["bcd"] = arr " />
大家一起来分析一下下面这段代码:
<?php$arr = array();$arr["abc"] = array("x" => 100, "age" => 18);$arr["bcd"] = array("x" => 200, "age" => 19);$arr["cde"] = array("x" => 250, "age" => 17);$arr2 = array();foreach ($arr as $name => $item) { $item2 = &$arr2[$name]; $item2["x"] = $item["x"] + 300; $item2["age"] = $item["age"] + 2;}//unt($item2);foreach ($arr2 as $name => $item2) { echo "name: $name, age: " . $item2['age'] . ", x: " . $item2['x'] . php_eol;}echo "too little".php_eol;//unt($item2);$item2 = array("age" => 30, "x" => 1000);print_r($item2);echo "next step".php_eol;foreach ($arr2 as $name => $item) { echo "name: $name, age: " . $item['age'] . ", x: " . $item['x'] . php_eol;}
如果你觉得上面的代码的执行结果是
name: abc, age: 20, x: 400name: bcd, age: 21, x: 500name: cde, age: 19, x: 550too littlearray( [age] => 30 [x] => 1000)next stepname: abc, age: 20, x: 400name: bcd, age: 21, x: 500name: cde, age: 19, x: 550
或者是
name: abc, age: 20, x: 400name: bcd, age: 21, x: 500name: cde, age: 21, x: 500too littlearray( [age] => 30 [x] => 1000)next stepname: abc, age: 20, x: 400name: bcd, age: 21, x: 500name: cde, age: 21, x: 500
那么你就应该继续往下看了。因为上面两个结果都是错误的,真正的执行结果如下:
name: abc, age: 20, x: 400name: bcd, age: 21, x: 500name: cde, age: 21, x: 500too littlearray( [a我跟阿姨ge] => 30 [x] =&g110警察节祝福语t; 1000)next stepname: abc, age: 20, x: 400name: bcd, age: 21, x: 500name: c做什么工作有前途de, age: 30, x: 1000
为什么会是这样一个结果呢?
因为在第一个引用赋值的foreach循环结束以后,$item2依然引用着$arr2数组的最后一个元素。而第二个foreach循环的时候,相当于把$arr2数组的元素依次赋值给$item2,也就相当于赋值给最后一个元素。也就是说描写大自然,在第二个foreach遍历的过程中,$arr2数组的变化是这样的:
循环到第1个元素时的数组:[1, 2, 1]循环到第2个元素时的数组:[1, 2, 2]循环到第3个元素时的数组:[1, 2, 2]
而后的
$item2 = array("age" => 30, "x" => 1000);
是为了告诉大家引用关系依然存在,并且,直接赋值也会导致引用的数据发生变化。(其实,第二个foreach循环时也是使用的直接赋值,只是有点不好观察出来)
那么,怎样才能将$item2与$arr2的最后一个元素的引用关系去简爱读后感英文版掉呢?其实很简单,只要添加以下语句就可以了。也就是源代码中注释的地方。
unt($item2);
这也可以说是php的一个小坑,对于php新手来说,很容易犯这种错误而云里雾里,不知所措。希望这篇文章能帮到这样的新手。
本文发布于:2023-04-07 16:49:20,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/9bf468066e1666c79f9bf7c357007824.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP二维数组的引用赋值容易犯的错误.doc
本文 PDF 下载地址:PHP二维数组的引用赋值容易犯的错误.pdf
留言与评论(共有 0 条评论) |