Heim  >  Artikel  >  Backend-Entwicklung  >  php foreach 指针

php foreach 指针

WBOY
WBOYOriginal
2016-08-18 09:16:241398Durchsuche

$arr = array('a', 'b', 'c');
$i = 0;
foreach($arr as $key => $value) {

<code>if($i == 0) {
    //第一次就执行了写操作
    $arr[$key] = $value . $value;
}
$i++;</code>

}
//$arr的指针被移动了一次,指向第二个元素b上。
var_dump(current($arr));//b

为什么一开始指针就到第二个元素去了

回复内容:

$arr = array('a', 'b', 'c');
$i = 0;
foreach($arr as $key => $value) {

<code>if($i == 0) {
    //第一次就执行了写操作
    $arr[$key] = $value . $value;
}
$i++;</code>

}
//$arr的指针被移动了一次,指向第二个元素b上。
var_dump(current($arr));//b

为什么一开始指针就到第二个元素去了

<code>$arr = array('a', 'b', 'c');
$i = 0;
foreach($arr as $key => $value) {
    if($i == 0) {
        $arr[$key] = $value . $value;
    }
    $i++;
}

</code>

伪代码形同

<code>$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++;
}</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn