Dalam PHP, kaedah array_merge_recursive(), json_encode()/json_decode() dan kaedah klon boleh digunakan untuk menyalin tatasusunan. array_merge_recursive() secara rekursif menggabungkan tatasusunan bersarang, tetapi lebih perlahan; json_encode()/json_decode() adalah lebih pantas, tetapi menggunakan memori adalah yang terpantas, tetapi hanya berfungsi pada objek (termasuk tatasusunan).
Teroka kaedah penyalinan yang berbeza dalam tatasusunan dalam PHP: prestasi, kelebihan dan keburukan
Pengenalan
Menyalin tatasusunan ialah operasi biasa dalam PHP. Walau bagaimanapun, pengendali tugasan lalai tidak mencipta salinan tatasusunan, sebaliknya mencipta rujukan kepada tatasusunan asal. Dalam sesetengah kes, ini boleh membawa kepada akibat yang tidak diingini. Oleh itu, adalah penting untuk memahami kaedah berbeza tatasusunan penyalinan dalam dalam PHP dan kebaikan dan keburukannya.
Kaedah 1: array_merge_recursive()
array_merge_recursive()
Fungsi ini akan menggabungkan berbilang tatasusunan menjadi tatasusunan baharu, sambil menggabungkan mana-mana tatasusunan bersarang secara rekursif. Ia boleh digunakan untuk membuat salinan dalam tatasusunan. array_merge_recursive()
函数会将多个数组合并成一个新的数组,同时递归地合并任何嵌套的数组。它可以用来创建数组的深度副本。
$original = ['key1' => 'value1', 'key2' => ['subkey1' => 'subvalue1']]; $copy = array_merge_recursive([], $original);
优点:
缺点:
方法 2:json_encode() 和 json_decode()
json_encode()
函数将一个 PHP 变量转换为 JSON 字符串,json_decode()
函数将 JSON 字符串转换为 PHP 变量。我们可以利用这些函数来创建数组的深度副本。
$original = ['key1' => 'value1', 'key2' => ['subkey1' => 'subvalue1']]; $copy = json_decode(json_encode($original), true);
优点:
array_merge_recursive()
速度较快。缺点:
方法 3:使用 clone
克隆对象也适用于数组,因为它会创建原始数组的一个完全独立的副本。
$original = ['key1' => 'value1', 'key2' => ['subkey1' => 'subvalue1']]; $copy = clone $original;
优点:
缺点:
实战案例
以下是一个实战案例,演示了如何使用 PHP 数组的深度复制:
<?php // 创建一个包含嵌套数组的原始数组 $original = [ 'name' => 'John', 'age' => 25, 'address' => [ 'street' => 'Main Street', 'city' => 'Anytown' ] ]; // 创建使用不同方法的深度副本 $copy1 = array_merge_recursive([], $original); $copy2 = json_decode(json_encode($original), true); $copy3 = clone $original; // 验证副本与原始数组是否不同 var_dump($copy1 !== $original); // 输出:true var_dump($copy2 !== $original); // 输出:true var_dump($copy3 !== $original); // 输出:true
在上面的示例中,我们创建了一个包含嵌套数组的原始数组。然后,我们使用 array_merge_recursive()
, json_encode()/json_decode()
和 clone
创建了三个深度副本。最后,我们使用 var_dump()
验证副本与原始数组是否不同,结果为 true
rrreee
json_encode()
Fungsi menukar pembolehubah PHP kepada rentetan JSON, json_decode()
Fungsi menukar rentetan JSON kepada pembolehubah PHP. Kita boleh menggunakan fungsi ini untuk membuat salinan dalam tatasusunan. 🎜rrreee🎜🎜Kelebihan: 🎜🎜array_merge_recursive()
, ia lebih pantas. array_merge_recursive()
, json_encode()/json_decode()
dan clone
. Akhir sekali, kami menggunakan var_dump()
untuk mengesahkan bahawa salinan adalah berbeza daripada tatasusunan asal, dan hasilnya adalah true
, menunjukkan bahawa salinan itu adalah contoh berasingan daripada tatasusunan asal . 🎜Atas ialah kandungan terperinci Terokai pendekatan berbeza untuk penyalinan dalam tatasusunan PHP: prestasi, kebaikan dan keburukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!