php 5.3 循环数组时的怪现象

$arr = array(0,1,2,3)
foreach($arr as $v){
	
}
var_dump(current($arr)) //最后数组指针停留在数组结尾,取不到值,false

循环过程中,拨动了arraycopy的指针,$arr的指针也在拨动,都拨动了最后,最后数组指针停留在数组结尾,取不到值,false

$arr = array(0,1,2,3)
foreach($arr as $k=>$v){
		$arr[$k] = $v;
 }
var_dump(current($arr)); //1

赋值就是发生了写 ,就要分裂了 ,有自己的zvalue了 和哈希表

刚开始都是0,值是零,指针也是零,现在还没有分裂,做了一个赋值的操作,指到1,写坏了分裂了,影响的是arraycopy,复制了一份循环
php 5.3 循环数组时的怪现象_第1张图片
另一个问题

并不是修改 a r r , 而 是 arr ,而是 arrarrcopy ,而是从 a r r c o p y 取 值 赋 给 了 arrcopy取值赋给了 arrcopyv,有这一步的操作的变化
php 5.3 循环数组时的怪现象_第2张图片
php 5.3 循环数组时的怪现象_第3张图片
在这里插入图片描述
a r r c o p y 这 些 付 给 了 arrcopy这些付给了 arrcopyv

0 是 a

KaTeX parse error: Expected 'EOF', got '&' at position 5: v是引用&̲arr[3];
$arr[3]的值被影响了
a b c a

走了四圈,每一圈都是引用赋值

1、数组使用时,慎重引用
2、foreach使用后,不会把数组的内部指针重置,使用数组时,不要假想内部指针正好指向数组头部,也可以在foreach之后,rest一下数组

php7后续会写

你可能感兴趣的:(PHP)