Maison >développement back-end >tutoriel php >Explorez différentes approches de la copie approfondie de tableaux PHP : performances, avantages et inconvénients
En PHP, les méthodes array_merge_recursive(), json_encode()/json_decode() et clone peuvent être utilisées pour copier des tableaux. array_merge_recursive() fusionne récursivement les tableaux imbriqués, mais est plus lent ; json_encode()/json_decode() est plus rapide, mais consomme de la mémoire ; le clone est le plus rapide, mais ne fonctionne que sur les objets (y compris les tableaux).
Explorez différentes méthodes de copie profonde de tableaux en PHP : performances, avantages et inconvénients
Introduction
La copie de tableaux est une opération courante en PHP. Cependant, l'opérateur d'affectation par défaut ne crée pas de copie du tableau, mais crée une référence au tableau d'origine. Dans certains cas, cela peut entraîner des conséquences inattendues. Par conséquent, il est important de comprendre les différentes méthodes de copie profonde de tableaux en PHP ainsi que leurs avantages et inconvénients.
Méthode 1 : array_merge_recursive()
array_merge_recursive()
La fonction fusionnera plusieurs tableaux dans un nouveau tableau, tout en fusionnant de manière récursive tous les tableaux imbriqués. Il peut être utilisé pour créer une copie complète d'un tableau. 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()
La fonction convertit une variable PHP en chaîne JSON, json_decode()
La fonction convertit une chaîne JSON en variable PHP. Nous pouvons utiliser ces fonctions pour créer des copies complètes de tableaux. 🎜rrreee🎜🎜Avantages : 🎜🎜array_merge_recursive()
, il est plus rapide. clone
🎜🎜🎜Le clonage d'objets fonctionne également avec des tableaux, car il crée une copie complètement indépendante du tableau d'origine. 🎜rrreee🎜🎜Avantages : 🎜🎜array_merge_recursive()
, json_encode()/json_decode()
et clone
. Enfin, nous utilisons var_dump()
pour vérifier que les copies sont différentes du tableau d'origine, et le résultat est true
, indiquant que les copies sont des instances indépendantes du tableau d'origine. . 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!