• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP foreach 摘引

php 搞代码 3年前 (2022-01-23) 10次浏览 已收录 0个评论

PHP foreach 引用

<pre class="prettyprint linenums"><?php$a = array(	'str1' => 'val1',	'str2' <span>@本文来*源gaodai#ma#com搞*!代#%^码$网*</span><textarea>搞gaodaima代码</textarea>=> 'val2',	'str3' => 'val3',	'str4' => 'val4',);$b = array(	'str1', 	'str2',	'str3',	'str4',);foreach ($b as &$val) {	$val = $a[$val];}unset($val);foreach ($b as $val) {	echo "-----$b[3]";	echo $val."\n";}?>

<?php$a = array(‘str1’ => ‘val1′,’str2’ => ‘val2′,’str3’ => ‘val3′,’str4’ => ‘val4’,);$b = array(‘str1’, ‘str2′,’str3′,’str4’,);foreach ($b as &$val) {$val = $a[$val];}foreach ($b as $val) {echo “—–$b[3]”;echo $val.”\n”;}?>


输出:

—–val1val1
—–val2val2
—–val3val3
—–val3val3

可以看到,因为第一个foreach 的引用最后的$[2] 引用没有关闭,所以,在第二个foreach 中已然在不断的对地址进行写操作;

通过打印$b[2] 的值,可以看出。随着foreach 的运行,$b[2] 的值在不断的改变。这就导致当foreach 运行到$b[1] 的时候,$b[2] 的值

就等于$b[1], 那么在最后一次运行时,$b[2] = $b[2] 就是的结果与$b[1] 一样了

解决方案:

使用unset () 方法将引用变量释放后再进行第二次foreach 循环。

<?php$a = array(	'str1' => 'val1',	'str2' => 'val2',	'str3' => 'val3',	'str4' => 'val4',);$b = array(	'str1', 	'str2',	'str3',	'str4',);foreach ($b as &$val) {	$val = $a[$val];}unset($val);foreach ($b as $val) {	echo "-----$b[3]";	echo $val."\n";}?>

输出结果:

—–val4val1
—–val4val2
—–val4val3
—–val4val4

方案二(不怎么好):

<?php$a = array(	'str1' => 'val1',	'str2' => 'val2',	'str3' => 'val3',	'str4' => 'val4',);$b = array(	'str1', 	'str2',	'str3',	'str4',);foreach ($b as &$val) {	$val = $a[$val];}// unset($val);foreach ($b as $item) {	echo "-----$b[3]";	echo $item."\n";}?>

换掉第二次foreach 中的as 后的变量,不使用被引用的变量,那么不会出现这样的情况。

输出:

—–val4val1
—–val4val2
—–val4val3
—–val4val4

总结: 建议在引用之后使用unset() 对其释放。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP foreach 摘引

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址