Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP Array Deep Copy Tradeoffs: Memilih Pendekatan yang Tepat

PHP Array Deep Copy Tradeoffs: Memilih Pendekatan yang Tepat

王林
王林asal
2024-05-03 22:30:011054semak imbas

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.

PHP Array Deep Copy Tradeoffs: Memilih Pendekatan yang TepatSalinan 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 asal

Bila 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 asal
  • Kelebihan salinan cetek
Cepat dan mudah

Menjimatkan memori

    kelebihan salinan cetek

Perubahan pada salinan juga mempengaruhi tatasusunan asal

    Tiada salinan membenamkan nilai Bersarang dalam tatasusunan atau objek bersarang
  • Kelebihan salinan dalam

Mencipta salinan bebas tatasusunan nilai asal

    tatasusunan atau objek
  • Perubahan kepada salinan tidak menjejaskan tatasusunan asal

Kelemahan salinan dalam

    Lebih perlahan dan lebih kompleks daripada salinan cetek
  • Ambil lebih banyak ingatan

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]]
  • Kesimpulan
  • Salinan cetek dan salinan dalam adalah kedua-dua teknik yang berguna dalam PHP. Kaedah yang anda pilih bergantung pada keperluan khusus anda. Memahami kelebihan dan kekurangan mereka boleh membantu anda membuat keputusan termaklum dan mengelakkan tingkah laku yang tidak dijangka.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn