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 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);
优点:
缺点:
方法 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()
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: 🎜🎜array_merge_recursive()
ist es schneller. clone
🎜🎜🎜Das Klonen von Objekten funktioniert auch mit Arrays, da es eine völlig unabhängige Kopie des ursprünglichen Arrays erstellt. 🎜rrreee🎜🎜Vorteile: 🎜🎜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!