在php中,只需要foreach語句採用參照迴圈的方式,那麼在迴圈體內對原陣列進行操作(修改),就會影響原陣列本身;語法「foreach ($array as &$value){//迴圈體語句塊;}」或「foreach ($array as $key => &$value){//迴圈體語句塊;}」。
php入門到就業線上直播課:進入學習
API 檔案、設計、偵錯、自動化測試一體化共同作業工具:
本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦
foreach是專門為遍歷陣列而設計的語句,是遍歷陣列時常用的方法,在遍歷陣列方面提供了很大的便利;PHP5後還可以遍歷物件(foreach僅能夠應用於陣列和物件)。
foreach語句遍歷陣列與陣列下標無關,且可以用於不連續的索引陣列和以字串為下標的關聯陣列。
foreach語句有兩種語法格式:
語法格式1:
foreach ($array as $value){
//迴圈體語句塊;
}
登入後複製
遍歷給定的 $array 陣列,在每次迴圈中將當前陣列的值賦給 $value。
語法格式2:
foreach ($array as $key => $value){
//迴圈體語句塊;
}
登入後複製
遍歷給定的 $array 陣列,在每次迴圈中會將當前陣列的值賦給 $value,鍵名賦給 $key。
說明:
foreach語句在每次迴圈時,陣列內部的指標會向前移一步,這樣在下一次迴圈中會得到下一個陣列元素,直到遍歷到陣列的末尾,停止遍歷並退出迴圈。
在foreach迴圈中修改原陣列
一般情況下,使用foreach語句遍歷陣列時,是對陣列的備份進行操作,一般不會影響陣列本身。
例如:在迴圈內部修改陣列,然後在迴圈外存取陣列,會發現陣列沒有改變
<?php
header("Content-type:text/html;charset=utf-8");
$array= array(1,2,3,4,5,);
echo "原陣列:";
var_dump($array);
foreach ($array as $value) {
$value = $value*2; // 元素值乘以2
}
echo "foreach處理後的陣列:";
var_dump($array);
?>
登入後複製
可以看出,兩個輸出是一樣的,陣列元素沒有發生變化;此時在foreach迴圈中對原陣列的修改是無效的。
但有時候是需要通過foreach迴圈來改變陣列,那要怎麼辦?
可以採用參照迴圈(就是在 $value
之前加上 &
,這樣foreach語句會以參照賦值而不是拷貝一個值),那麼在迴圈體內對原陣列進行操作,就會影響原陣列本身。
<?php
header("Content-type:text/html;charset=utf-8");
$array= array(1,2,3,4,5,);
echo "原陣列:";
var_dump($array);
foreach ($array as &$value) {
$value = $value*2; // 元素值乘以2
}
echo "foreach處理後的陣列:";
var_dump($array);
?>
登入後複製
可以看出:陣列元素髮生了變化,元素值都乘以了2。
但最後一個元素前,多了一個&
,這又是怎麼了?怎麼去除?
這因為陣列最後一個元素的 $value
參照在 foreach 迴圈之後仍會保留。我們需要在輸出陣列前,使用unset() 來將其銷燬。
unset($value); // 最後取消掉參照
var_dump($array)
登入後複製
&
符消失了!
推薦學習:《》
以上就是php怎麼在foreach迴圈中修改原陣列的詳細內容,更多請關注TW511.COM其它相關文章!