首頁 >後端開發 >PHP問題 >php怎麼在foreach循環中修改原數組

php怎麼在foreach循環中修改原數組

青灯夜游
青灯夜游原創
2022-09-28 17:18:083296瀏覽

在php中,只需要foreach語句採用引用循環的方式,那麼在循環體內對原始數組進行操作(修改),就會影響原始數組本身;語法「foreach ($array as &$value ){//循環體語句塊;}”或“foreach ($array as $key => &$value){//循環體語句塊;}”。

php怎麼在foreach循環中修改原數組

本教學操作環境: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);
?>

php怎麼在foreach循環中修改原數組

可以看出,兩個輸出是一樣的,數組元素沒有改變;此時在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);
?>

php怎麼在foreach循環中修改原數組

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

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

這因為數組最後一個元素的 $value 引用在 foreach 迴圈之後仍會保留。我們需要在輸出數組前,使用unset() 來銷毀。

unset($value); // 最后取消掉引用
var_dump($array)

php怎麼在foreach循環中修改原數組

&符號消失了!

推薦學習:《PHP影片教學

以上是php怎麼在foreach循環中修改原數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn