Kaedah untuk menyalin tatasusunan PHP dalam: array_map(), clone(), JSON serialization and deserialization, recurse_copy(). Perbandingan prestasi menunjukkan bahawa dalam versi PHP 7.4+, recurse_copy() mempunyai prestasi terbaik, diikuti oleh array_map() dan clone(). Prestasi json_encode/json_decode adalah agak rendah tetapi sesuai untuk menyalin struktur data yang kompleks.
Menyalin tatasusunan tidak selalu mudah dalam PHP. Secara lalai, PHP menggunakan salinan cetek, yang bermaksud ia hanya menyalin rujukan dalam tatasusunan, bukan data sebenar. Ini boleh menyebabkan masalah apabila salinan tatasusunan perlu diproses secara bebas.
Berikut ialah beberapa cara untuk menyalin tatasusunan secara mendalam:
array_map()
untuk memproses setiap elemen secara rekursiffunction deepCopy1($array) { return array_map(function($value) { if (is_array($value)) { return deepCopy1($value); } else { return $value; } }, $array); }
array_map()
递归处理每个元素function deepCopy2($array) { if (is_array($array)) { return array_map(function($value) { return clone $value; }, $array); } else { return $array; } }
clone()
递归复制数组function deepCopy3($array) { return json_decode(json_encode($array), true); }
function deepCopy4($array) { return recurse_copy($array); }
recurse_copy()
函数(仅适用于PHP 7.4+)$array = [ 'name' => 'John Doe', 'age' => 30, 'address' => [ 'street' => 'Main Street', 'city' => 'New York', 'state' => 'NY' ] ];
我们使用以下数组对其进行性能对比:
$start = microtime(true); deepCopy1($array); $end = microtime(true); $time1 = $end - $start; $start = microtime(true); deepCopy2($array); $end = microtime(true); $time2 = $end - $start; $start = microtime(true); deepCopy3($array); $end = microtime(true); $time3 = $end - $start; $start = microtime(true); deepCopy4($array); $end = microtime(true); $time4 = $end - $start;
使用以下代码进行测试:
rrreee结果如下:
方法 | 时间 (秒) |
---|---|
array_map() |
0.000013 |
clone() |
0.000014 |
json_encode /json_decode
|
0.000021 |
recurse_copy() |
0.000009 |
结论:
recurse_copy()
函数在PHP 7.4+版本中提供了最佳性能,其次是array_map()
和clone()
。json_encode
/json_decode
2 > Salin secara rekursifrrreee
recurse_copy()
(hanya untuk PHP 7.4+). rrreee🎜Perbandingan prestasi🎜Kami menggunakan tatasusunan berikut untuk membandingkan prestasinya:🎜rrreee🎜Gunakan kod berikut untuk menguji:🎜rrreee🎜Hasilnya adalah seperti berikut:🎜array_map()
klon()
json_decode
recurse_copy()
recurse_copy()
menyediakan prestasi terbaik dalam PHP 7.4+ Prestasi terbaik, diikuti dengan array_map()
dan clone()
. Walaupun prestasi kaedah json_encode
/json_decode
agak rendah, ia sesuai untuk situasi di mana penyalinan mendalam bagi struktur data kompleks diperlukan. 🎜Atas ialah kandungan terperinci Panduan Komprehensif untuk Menyalin Tatasusunan Dalam dalam PHP: Analisis Kaedah dan Perbandingan Prestasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!