$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++;}