Shallow copy only copies references, not values; deep copy creates an independent copy of the original array, including copying nested values. Shallow copy is suitable for quickly creating a copy, modifying the copy affects the original array, and does not copy nested values; deep copy is suitable for creating independent copies, copying nested values, and does not want to modify the copy to affect the original array. There are differences in speed, memory usage, and modification impact, and the choice depends on specific needs.
In PHP, array copying is one of the tasks that developers often need to perform. There are two main ways to copy an array: shallow copy and deep copy.
Shallow copyOnly copies the reference to the array, not the values contained in the array. This means that any changes made to the shallowly copied array will also be reflected in the original array.
Deep Copy Creates a completely new copy of the original array. This includes copying all values contained in the array, even if the values themselves are other arrays or objects. This means that any changes made to the deep-copied array will not affect the original array.
When to use shallow copy
When to use a deep copy
Advantages of shallow copy
Disadvantages of shallow copy
Advantages of deep copy
Disadvantages of deep copy
Practical case
The following code example demonstrates the difference between shallow copy and deep copy:
// 浅复制 $originalArray = [ 'name' => 'John Doe', 'age' => 30, 'address' => [ 'street' => 'Main Street', 'number' => 123 ] ]; $shallowCopy = $originalArray; $shallowCopy['name'] = 'Jane Doe'; // 浅复制:对副本的更改也影响原始数组 $originalArray['address']['street'] = 'New Main Street'; // 浅复制:对原始数组的更改也影响副本 var_dump($originalArray); // 输出:['name' => 'Jane Doe', 'age' => 30, 'address' => ['street' => 'New Main Street', 'number' => 123]] var_dump($shallowCopy); // 输出:['name' => 'Jane Doe', 'age' => 30, 'address' => ['street' => 'New Main Street', 'number' => 123]] // 深度复制 $deepCopy = json_decode(json_encode($originalArray), true); $deepCopy['name'] = 'John Doe Jr.'; // 深度复制:对副本的更改不会影响原始数组 $originalArray['address']['number'] = 124; // 深度复制:对原始数组的更改不会影响副本 var_dump($originalArray); // 输出:['name' => 'John Doe', 'age' => 30, 'address' => ['street' => 'New Main Street', 'number' => 124]] var_dump($deepCopy); // 输出:['name' => 'John Doe Jr.', 'age' => 30, 'address' => ['street' => 'New Main Street', 'number' => 123]]
Conclusion
Shallow copy and deep copy are both useful techniques in PHP. Which method you choose depends on your specific needs. Understanding their advantages and disadvantages can help you make informed decisions and avoid unexpected behavior.
The above is the detailed content of PHP Array Deep Copy Tradeoffs: Choosing the Right Approach. For more information, please follow other related articles on the PHP Chinese website!