Salinan cetek hanya menyalin rujukan, bukan nilai salinan dalam mencipta salinan bebas tatasusunan asal, termasuk menyalin nilai bersarang. Salinan cetek sesuai untuk membuat salinan dengan cepat, mengubah suai salinan menjejaskan tatasusunan asal, dan tidak menyalin nilai salinan dalam sesuai untuk membuat salinan bebas, menyalin nilai bersarang dan tidak mahu mengubah suai salinan untuk menjejaskan asal; tatasusunan. Terdapat perbezaan dalam kelajuan, penggunaan memori dan kesan pengubahsuaian, dan pilihan bergantung pada keperluan tertentu. . Terdapat dua cara utama untuk menyalin tatasusunan: salinan cetek dan salinan dalam.
Salinan cetek
Hanya menyalin rujukan tatasusunan, bukan nilai yang terkandung dalam tatasusunan. Ini bermakna bahawa sebarang perubahan yang dibuat pada tatasusunan yang disalin secara cetek juga akan ditunjukkan dalam tatasusunan asal.Deep Copy
Buat salinan baharu bagi tatasusunan asal. Ini termasuk menyalin semua nilai yang terkandung dalam tatasusunan, walaupun nilai itu sendiri adalah tatasusunan atau objek lain. Ini bermakna bahawa sebarang perubahan yang dibuat pada tatasusunan yang disalin secara mendalam tidak akan menjejaskan tatasusunan asal. Bila hendak menggunakan salinan cetek Tatasusunan asalBila hendak menggunakan salinan dalam
Apabila anda perlu mencipta salinan bebas tatasusunan asal
Apabila anda perlu menyalin nilai dalam tatasusunan atau objek bersarang
Apabila anda tidak mahu membuat salinan salinan Apabila perubahan menjejaskan tatasusunan asalMenjimatkan memori
Perubahan pada salinan juga mempengaruhi tatasusunan asal
Mencipta salinan bebas tatasusunan nilai asal
Kelemahan salinan dalam
contoh kod berikut menunjukkan perbezaan antara salinan cetek dan salinan dalam:
// 浅复制 $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]]
Atas ialah kandungan terperinci PHP Array Deep Copy Tradeoffs: Memilih Pendekatan yang Tepat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!