php怎麼在foreach迴圈中修改原陣列

2022-09-28 18:00:20

在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);
?>
登入後複製

1.png

可以看出,兩個輸出是一樣的,陣列元素沒有發生變化;此時在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.png

可以看出:陣列元素髮生了變化,元素值都乘以了2。

但最後一個元素前,多了一個&,這又是怎麼了?怎麼去除?

這因為陣列最後一個元素的 $value 參照在 foreach 迴圈之後仍會保留。我們需要在輸出陣列前,使用unset() 來將其銷燬。

unset($value); // 最後取消掉參照
var_dump($array)
登入後複製

3.png

&符消失了!

推薦學習:《》

以上就是php怎麼在foreach迴圈中修改原陣列的詳細內容,更多請關注TW511.COM其它相關文章!