Heim > Backend-Entwicklung > PHP-Tutorial > Entdecken Sie verschiedene Ansätze für das Deep Copying von PHP-Arrays: Leistung, Vor- und Nachteile

Entdecken Sie verschiedene Ansätze für das Deep Copying von PHP-Arrays: Leistung, Vor- und Nachteile

WBOY
Freigeben: 2024-05-04 15:15:01
Original
809 Leute haben es durchsucht

In PHP können die Methoden array_merge_recursive(), json_encode()/json_decode() und clone zum Kopieren von Arrays verwendet werden. array_merge_recursive() führt verschachtelte Arrays rekursiv zusammen, ist aber langsamer; json_encode()/json_decode() ist schneller, verbraucht aber Speicher, funktioniert aber nur bei Objekten (einschließlich Arrays).

Entdecken Sie verschiedene Ansätze für das Deep Copying von PHP-Arrays: Leistung, Vor- und Nachteile

Entdecken Sie verschiedene Methoden zum tiefen Kopieren von Arrays in PHP: Leistung, Vor- und Nachteile

Einführung

Das Kopieren von Arrays ist ein häufiger Vorgang in PHP. Der Standardzuweisungsoperator erstellt jedoch keine Kopie des Arrays, sondern einen Verweis auf das ursprüngliche Array. In einigen Fällen kann dies zu unbeabsichtigten Folgen führen. Daher ist es wichtig, die verschiedenen Methoden zum Deep Copying von Arrays in PHP und ihre Vor- und Nachteile zu verstehen.

Methode 1: array_merge_recursive()

array_merge_recursive() Die Funktion führt mehrere Arrays zu einem neuen Array zusammen, während alle verschachtelten Arrays rekursiv zusammengeführt werden. Es kann verwendet werden, um eine tiefe Kopie eines Arrays zu erstellen. array_merge_recursive() 函数会将多个数组合并成一个新的数组,同时递归地合并任何嵌套的数组。它可以用来创建数组的深度副本。

$original = ['key1' => 'value1', 'key2' => ['subkey1' => 'subvalue1']];
$copy = array_merge_recursive([], $original);
Nach dem Login kopieren

优点:

  • 简单易用。
  • 递归合并嵌套数组。

缺点:

  • 相对于其他方法速度较慢。
  • 可能导致栈溢出错误,如果数组过于嵌套。

方法 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);
Nach dem Login kopieren

优点:

  • 相对于 array_merge_recursive() 速度较快。
  • 处理任意类型的数组。

缺点:

  • 对于大型数组,可能会消耗大量内存。

方法 3:使用 clone

克隆对象也适用于数组,因为它会创建原始数组的一个完全独立的副本。

$original = ['key1' => 'value1', 'key2' => ['subkey1' => 'subvalue1']];
$copy = clone $original;
Nach dem Login kopieren

优点:

  • 速度最快的深度复制方法。
  • 创建一个真正的副本,断开了与原始数组的联系。

缺点:

  • 只能用于对象(包括数组)。

实战案例

以下是一个实战案例,演示了如何使用 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
Nach dem Login kopieren

在上面的示例中,我们创建了一个包含嵌套数组的原始数组。然后,我们使用 array_merge_recursive(), json_encode()/json_decode()clone 创建了三个深度副本。最后,我们使用 var_dump() 验证副本与原始数组是否不同,结果为 truerrreee

🎜Vorteile:🎜🎜
  • Einfach und leicht zu bedienen.
  • Verschachtelte Arrays rekursiv zusammenführen.
🎜🎜Nachteile: 🎜🎜
  • Langsamer als andere Methoden.
  • Kann zu Stapelüberlauffehlern führen, wenn das Array zu verschachtelt ist.
🎜🎜Methode 2: json_encode() und json_decode()🎜🎜🎜json_encode() Die Funktion konvertiert eine PHP-Variable in einen JSON-String, json_decode() Funktion konvertiert einen JSON-String in eine PHP-Variable. Mit diesen Funktionen können wir tiefe Kopien von Arrays erstellen. 🎜rrreee🎜🎜Vorteile: 🎜🎜
  • Im Vergleich zu array_merge_recursive() ist es schneller.
  • Verarbeiten Sie Arrays jeglichen Typs.
🎜🎜Nachteile: 🎜🎜
  • Bei großen Arrays kann viel Speicher verbraucht werden.
🎜🎜Methode 3: Verwenden von clone🎜🎜🎜Das Klonen von Objekten funktioniert auch mit Arrays, da es eine völlig unabhängige Kopie des ursprünglichen Arrays erstellt. 🎜rrreee🎜🎜Vorteile: 🎜🎜
  • Die schnellste Deep-Copy-Methode.
  • Erstellen Sie eine echte Kopie, getrennt vom ursprünglichen Array.
🎜🎜Nachteile: 🎜🎜
  • Kann nur für Objekte (einschließlich Arrays) verwendet werden.
🎜🎜Praktischer Fall🎜🎜🎜Das Folgende ist ein praktischer Fall, der zeigt, wie man eine tiefe Kopie eines Arrays in PHP verwendet: 🎜rrreee🎜Im obigen Beispiel erstellen wir ein Grundelement, das ein verschachteltes Array enthält Array. Anschließend haben wir drei tiefe Kopien mit array_merge_recursive(), json_encode()/json_decode() und clone erstellt. Schließlich verwenden wir var_dump(), um zu überprüfen, ob sich die Kopien vom ursprünglichen Array unterscheiden. Das Ergebnis ist true, was anzeigt, dass die Kopien unabhängige Instanzen des ursprünglichen Arrays sind . 🎜

Das obige ist der detaillierte Inhalt vonEntdecken Sie verschiedene Ansätze für das Deep Copying von PHP-Arrays: Leistung, Vor- und Nachteile. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage