在 PHP 中,陣列複製有兩種策略:深度複製和淺複製。深度複製建立來源數組的獨立副本,對其中一個數組的變更不會影響另一個數組。淺複製僅複製數組的引用,對其中一個數組的變更會反映在另一個數組中。深度複製需要遍歷數組並建立新實體,因此比淺複製更耗資源,但淺複製只能複製引用,因此速度更快。深度複製用於建立獨立的資料庫記錄集合,而淺複製則用於將陣列傳遞給函數。
在 PHP 中,陣列變數透過引用傳遞。這意味著對原始數組所做的任何更改都將反映在所有引用該數組的變數中。但是,當我們需要建立數組的副本以便對它們進行獨立更改時,就有必要理解深度複製和淺複製之間的差異。
深度複製建立目標陣列中來源陣列的完全獨立副本。對目標數組的變更不會影響原始數組,反之亦然。
$original_array = ['foo' => 'bar', 'baz' => ['a' => 1, 'b' => 2]]; // 深度复制 $deep_copy = clone $original_array; // 或使用深拷贝函数如 array_map(function($value) { return clone $value; }, $original_array) $deep_copy['foo'] = 'new_bar'; $deep_copy['baz']['a'] = 3; var_dump($original_array); // 输出: ['foo' => 'bar', 'baz' => ['a' => 1, 'b' => 2]] var_dump($deep_copy); // 输出: ['foo' => 'new_bar', 'baz' => ['a' => 3, 'b' => 2]]
淺複製僅複製來源陣列的參考。對目標數組的變更也會反映在原始數組中。
$original_array = ['foo' => 'bar', 'baz' => ['a' => 1, 'b' => 2]]; // 浅复制 $shallow_copy = $original_array; $shallow_copy['foo'] = 'new_bar'; $shallow_copy['baz']['a'] = 3; var_dump($original_array); // 输出: ['foo' => 'new_bar', 'baz' => ['a' => 3, 'b' => 2]] var_dump($shallow_copy); // 输出: ['foo' => 'new_bar', 'baz' => ['a' => 3, 'b' => 2]]
深度複製比淺複製更耗費資源,因為必須遍歷整個來源陣列並為目標陣列建立新實體。淺複製只需複製引用,因此通常比深度複製快得多。
使用深度複製建立獨立的資料庫記錄集合
// 从数据库获取记录 $records = $db->fetchRecords(); // 深度复制记录集合以进行独立更新 $updated_records = clone $records;
使用淺複製將陣列傳遞給函數
function updateRecord($record) { $record['updated'] = true; } $original_record = ['id' => 1, 'name' => 'John']; // 浅复制原始记录并更新副本 $shallow_copy = $original_record; updateRecord($shallow_copy); // 更新会反映在原始记录中 var_dump($original_record); // 输出: ['id' => 1, 'name' => 'John', 'updated' => true]
以上是PHP數組的複製策略:深度複製與淺複製,解析與效能比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!