Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Panduan Komprehensif untuk Menyalin Tatasusunan Dalam dalam PHP: Analisis Kaedah dan Perbandingan Prestasi

Panduan Komprehensif untuk Menyalin Tatasusunan Dalam dalam PHP: Analisis Kaedah dan Perbandingan Prestasi

王林
王林asal
2024-05-02 18:33:01881semak imbas

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.

Panduan Komprehensif untuk Menyalin Tatasusunan Dalam dalam PHP: Analisis Kaedah dan Perbandingan Prestasi

Panduan Komprehensif untuk Menyalin Tatasusunan Dalam PHP: Analisis Kaedah dan Perbandingan Prestasi

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:

1 Gunakan array_map() untuk memproses setiap elemen secara rekursif

function 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;
  }
}

2. 使用clone()递归复制数组

function deepCopy3($array) {
  return json_decode(json_encode($array), true);
}

3. 使用JSON序列化和反序列化

function deepCopy4($array) {
  return recurse_copy($array);
}

4. 使用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_decode2 > Salin secara rekursifrrreee

3 Gunakan pensirilan dan penyahsiran JSONrrreee🎜4 Gunakan fungsi 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:🎜 Kaedah Masa (saat) array_map() 0.000013 klon() 0.000014 json_encode/json_decode 0.000021 recurse_copy() 0.000009 🎜Kesimpulan:🎜🎜 fungsirecurse_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!

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