求解:数组引用 foreach 、 array_splice()
时间:2011-12-05
来源:互联网
PHP code
执行结果 ,为何$a2使用引用方式时, 在内层foreach 中的 array_splice()之后,不再执行外面的foreach
HTML code
$a = array(1,2,3,4,5,6,7); $a2 = &$a; //引用 foreach($a2 as $index =>$item){ echo "===outer start,index= $index ====<br />"; echo "\$a[",$index,'] =>',$item,"<br />"; echo 'count($a)=',count($a2).'<br />'; foreach ($a2 as $i => $val) { echo "----inner start--- key=".$i." ----"; if($val==5){ echo "<br />"; array_splice($a2,$i,1); //unset($a2[$i]); echo 'array_splice($a,'.$i.',1),$val='.$val.' <br />'; echo 'count($a)=',count($a2).'<br />'; } echo "----inner end----<br />"; } echo "\$a[",$index,'] =>',$item,"<br />"; echo 'count($a)=',count($a).'<br />'; echo "====outer end, index= $index ====<br />"; } print_r($a);
执行结果 ,为何$a2使用引用方式时, 在内层foreach 中的 array_splice()之后,不再执行外面的foreach
HTML code
===outer start,index= 0 ====
$a[0] =>1
count($a)=7
----inner start--- key=0 --------inner end----
----inner start--- key=1 --------inner end----
----inner start--- key=2 --------inner end----
----inner start--- key=3 --------inner end----
----inner start--- key=4 ----
array_splice($a,4,1),$val=5
count($a)=6
----inner end----
----inner start--- key=0 --------inner end----
----inner start--- key=1 --------inner end----
----inner start--- key=2 --------inner end----
----inner start--- key=3 --------inner end----
----inner start--- key=4 --------inner end----
----inner start--- key=5 --------inner end----
$a[0] =>1
count($a)=6
====outer end, index= 0 ====
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 6 [5] => 7 )
作者: abiao5555 发布时间: 2011-12-05
因为你的 array_splice 破坏了传给 foreach 的数组结构
你没注意到内层 foreach 也同时终止了吗?
你没注意到内层 foreach 也同时终止了吗?
作者: xuzuning 发布时间: 2011-12-05
内层并没有终止啊?
array_splice($a,4,1) 默认重置里数组指针,因此内层重新执行了一遍循环
如果改为 array_splice($a,4,1,true),内层就成了死循环,是何原理,我的理解,删掉一个数组元素,不就是少循环一次吗,为何出现这种情况
array_splice($a,4,1) 默认重置里数组指针,因此内层重新执行了一遍循环
如果改为 array_splice($a,4,1,true),内层就成了死循环,是何原理,我的理解,删掉一个数组元素,不就是少循环一次吗,为何出现这种情况
作者: abiao5555 发布时间: 2011-12-05
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28