In PHP umfassen die Methoden zum Implementieren einer Array-Deep-Kopie: elementweises Kopieren mit array_map(), den in PHP integrierten Funktionen clone() und array_slice() sowie der Drittanbieter-Bibliothek DeepCopy. Beim Element-für-Element-Kopieren wird eine for-Schleife verwendet, array_map() verwendet eine Callback-Funktion, clone() erstellt eine Referenz und array_slice() erzwingt eine tiefe Kopie. Die Drittanbieterbibliothek DeepCopy ist auf Deep Copying spezialisiert und kann in komplexen Szenarien eingesetzt werden. In praktischen Anwendungen können damit die Artikel im Warenkorb geklont werden, um eine Beeinträchtigung des ursprünglichen Warenkorbs zu vermeiden.
In PHP ist Array ein weit verbreiteter universeller Variablentyp. Wenn Sie ein Array und seine Elemente manipulieren müssen, müssen Sie Kopien davon erstellen, um unbeabsichtigte Nebenwirkungen von Änderungen am ursprünglichen Array zu vermeiden. PHP bietet mehrere Methoden zur Implementierung von Deep Copy, jede mit ihren eigenen Vor- und Nachteilen.
for
-Schleife. for
循环最基本的方法是使用 for
循环遍历数组并逐个元素地创建副本。代码示例如下:
<?php $originalArray = [1, 2, ['a', 'b']]; $newArray = []; for ($i = 0; $i < count($originalArray); $i++) { if (is_array($originalArray[$i])) { $newArray[$i] = []; for ($j = 0; $j < count($originalArray[$i]); $j++) { $newArray[$i][$j] = $originalArray[$i][$j]; } } else { $newArray[$i] = $originalArray[$i]; } } print_r($originalArray); print_r($newArray); ?>
array_map()
array_map()
函数提供了更简洁的方法来应用自定义回调函数到数组中的每个元素。要进行深度复制,您可以将回调函数设置为恒等函数:
<?php $originalArray = [1, 2, ['a', 'b']]; $newArray = array_map(function($item) { return is_array($item) ? array_map(__FUNCTION__, $item) : $item; }, $originalArray); print_r($originalArray); print_r($newArray); ?>
clone()
和 array_slice()
对于简单数组,clone
关键字可以创建一个新的数组,该数组包含对原始数组元素的引用。但是,如果原始数组包含嵌套数组,则嵌套元素只会被引用,而不会实际复制。
array_slice
函数可以与 clone
一起使用,以强制对嵌套数组进行深度复制:
<?php $originalArray = [1, 2, ['a', 'b']]; $newArray = clone $originalArray; $newArray[2] = array_slice($newArray[2], 0); print_r($originalArray); print_r($newArray); ?>
DeepCopy
for
zu verwenden, um das Array zu durchlaufen und eine Element-für-Element-Kopie zu erstellen . Das Codebeispiel lautet wie folgt: <?php useDeepCopy\DeepCopy; $copier = new DeepCopy(); $originalArray = [1, 2, ['a', 'b']]; $newArray = $copier->copy($originalArray); print_r($originalArray); print_r($newArray); ?>
array_map()
array_map()
bietet eine präzisere Möglichkeit, eine benutzerdefinierte Rückruffunktion auf jedes Element im anzuwenden Array. Um eine tiefe Kopie zu erstellen, können Sie die Callback-Funktion als Identitätsfunktion festlegen: <?php class Product { public $name; public $price; public function __construct($name, $price) { $this->name = $name; $this->price = $price; } } class Cart { private array $products; public function addProduct(Product $product) { $this->products[] = $product; } public function getProducts() { return $this->products; } public function cloneProducts() { $copier = new DeepCopy(); return $copier->copy($this->products); } } $cart = new Cart(); $cart->addProduct(new Product('Apple', 1.5)); $cart->addProduct(new Product('Banana', 2.0)); $clonedProducts = $cart->cloneProducts(); $clonedProducts[0]->price = 1.8; print_r($cart->getProducts()); print_r($clonedProducts); ?>
clone()
und array_slice()
🎜🎜 Bei einfachen Arrays erstellt das Schlüsselwort clone
ein neues Array, das Verweise auf die ursprünglichen Array-Elemente enthält. Wenn das ursprüngliche Array jedoch ein verschachteltes Array enthält, werden die verschachtelten Elemente nur referenziert und nicht tatsächlich kopiert. 🎜🎜Die Funktion array_slice
kann mit clone
verwendet werden, um eine tiefe Kopie verschachtelter Arrays zu erzwingen: 🎜rrreee🎜Verwenden Sie eine externe Bibliothek: DeepCopy
🎜 🎜Wenn Sie häufig Deep Copy benötigen, können Sie eine Bibliothek eines Drittanbieters wie DeepCopy verwenden, die auf das Deep Copy von Objekten und Arrays spezialisiert ist. 🎜rrreee🎜Praktischer Fall: Klonen Sie die Artikel im Warenkorb🎜🎜Das folgende Beispiel zeigt, wie Sie mit Deep Copy die Artikel im Warenkorb klonen, sodass die Artikel geändert werden können, ohne dass sich dies auf den ursprünglichen Warenkorb auswirkt:🎜rrreeeDas obige ist der detaillierte Inhalt vonPHP Array Deep Copy entmystifizieren: Die Geheimnisse hinter verschiedenen Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!