$arr = array('a', 'b', 'c');
$i = 0;
foreach($arr as $key => $value) {
if($i == 0) { //第一次就执行了写操作 $arr[$key] = $value . $value;}$i++;
}
//$arr的指针被移动了一次,指向第二个元素b上。
var_dump(current($arr));//b
为什么一开始指针就到第二个元素去了
回复内容: $arr = array('a', 'b', 'c');
$i = 0;
foreach($arr as $key => $value) {
if($i == 0) { //第一次就执行了写操作 $arr[$key] = $value . $value;}$i++;
}
//$arr的指针被移动了一次,指向第二个元素b上。
var_dump(current($arr));//b
为什么一开始指针就到第二个元素去了
$arr = array('a', 'b', 'c');$i = 0;foreach($arr as $key => $value) { if($i == 0) { $arr[$key] = $value . $value; } $i++;}
伪代码形同
$arr = array('a', 'b', 'c');$i = 0;$arrcopy = $arr; //复制出一个待循环数组的副本,接下来都是操作这个副本$key = currentkey($arrcopy); //将获取到的值分配给$k;$val = currentval($arrcopy); //将获取到的值分配给$v;//移动副本数组的指针,这边执行顺序比写时复制高,所以先移动next($arrcopy);$arr = $arrcopy;//将副本赋值回给$arr((主要是将指针同步移动)){ //大括号的内容 if($i == 0) { $arr[$key] = $value . $value; } $i++;}//然后第二次循环$key = currentkey($arrcopy); $val = currentval($arrcopy);//移动副本数组的指针,这边执行顺序比写时复制高,所以先移动next($arrcopy);$arr = $arrcopy;//将副本赋值回给$arr((主要是将指针同步移动)){ //大括号的内容 if($i == 0) { $arr[$key] = $value . $value; } $i++;}//然后第三次循环$key = currentkey($arrcopy); $val = currentval($arrcopy);//移动副本数组的指针,这边执行顺序比写时复制高,所以先移动next($arrcopy);$arr = $arrcopy;//将副本赋值回给$arr((主要是将指针同步移动)){ //大括号的内容 if($i == 0) { $arr[$key] = $value . $value; } $i++;}