首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 二維陣列遍歷技巧:foreach 與 for 迴圈的差異解析

     編輯:PHP 綜合知識

前言

在 PHP 開發中,遍歷二維陣列是常見操作。許多開發者直覺會使用 foreach,但若不理解其值傳遞機制,容易導致修改失效。本文透過實例說明 foreach 與 for 迴圈在處理二維陣列時的關鍵差異。

問題場景

假設我們有一個包含文章標題與內容的二維陣列:

<?php
$blog = array(
    array(
        "titledata" => "titleMM",
        "bodydata" => "bodyMM"
    ),
    array(
        "titledata" => "titleGG",
        "bodydata" => "bodyGG"
    )
);
?>

錯誤示範:foreach 值傳遞導致修改無效

若直接在 foreach 中修改陣列元素:

<?php
foreach ($blog as $b) {
    $b['titledata'] = "BB";
    $b['bodydata'] = "CC";
}
print_r($blog);
?>

結果: 原陣列 $blog 內容並未改變。原因是 foreach 預設以「值傳遞」方式複製元素給 $b,修改的是副本而非原陣列。

正確做法:使用 for 迴圈或 foreach 參考傳遞

方法一:for 迴圈配合索引直接操作原陣列

<?php
for ($i = 0; $i < count($blog); $i++) {
    $blog[$i]['titledata'] = "title";
    $blog[$i]['bodydata'] = "body";
}
print_r($blog);
?>

透過索引 $i 直接存取 $blog[$i],成功修改原陣列資料。

方法二:foreach 參考傳遞(PHP 5+)

<?php
foreach ($blog as &$b) {
    $b['titledata'] = "title";
    $b['bodydata'] = "body";
}
unset($b); // 建議迴圈結束後銷毀參考,避免後續誤用
print_r($blog);
?>

在變數前加 & 符號,表示以參考方式取得元素,修改即生效於原陣列。

總結

  • foreach ($arr as $val):值傳遞,修改 $val 不影響原陣列。
  • foreach ($arr as &$val):參考傳遞,修改 $val 同步更新原陣列,需注意迴圈後 unset($val)。
  • for 迴圈:透過索引直接操作,邏輯直觀,效能略優於 foreach 參考模式。

實務上,若需修改陣列內容,推薦使用 foreach 參考傳遞(語法簡潔)或 for 迴圈(控制精確);僅需讀取時,預設 foreach 即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved