PHP-Array-Kopierstrategie: Deep Copy und Shallow Copy, Analyse und Leistungsvergleich

WBOY
Freigeben: 2024-05-02 14:57:01
Original
749 Leute haben es durchsucht

In PHP gibt es zwei Strategien zum Array-Kopieren: tiefes Kopieren und flaches Kopieren. Eine tiefe Kopie erstellt eine unabhängige Kopie des Quellarrays und Änderungen an einem Array haben keine Auswirkungen auf das andere Array. Beim flachen Kopieren werden nur die Referenzen der Arrays kopiert. Änderungen an einem der Arrays werden im anderen Array widergespiegelt. Deep Copy erfordert das Durchlaufen des Arrays und das Erstellen neuer Entitäten und ist daher ressourcenintensiver als flaches Kopieren. Flaches Kopieren kann jedoch nur Referenzen kopieren und ist daher schneller. Deep Copy wird verwendet, um eine unabhängige Sammlung von Datenbankeinträgen zu erstellen, während flache Kopie verwendet wird, um ein Array an eine Funktion zu übergeben.

PHP-Array-Kopierstrategie: Deep Copy und Shallow Copy, Analyse und Leistungsvergleich

PHP-Array-Kopierstrategie: Deep Copy vs. Shallow Copy

In PHP werden Array-Variablen als Referenz übergeben. Dies bedeutet, dass alle am ursprünglichen Array vorgenommenen Änderungen in allen Variablen widergespiegelt werden, die auf das Array verweisen. Wenn wir jedoch Kopien von Arrays erstellen müssen, um unabhängige Änderungen daran vorzunehmen, ist es notwendig, den Unterschied zwischen Deep Copy und Shallow Copy zu verstehen.

Deep Copy

Deep Copy erstellt eine völlig unabhängige Kopie des Quellarrays im Zielarray. Änderungen am Ziel-Array haben keine Auswirkungen auf das ursprüngliche Array und umgekehrt.

$original_array = ['foo' => 'bar', 'baz' => ['a' => 1, 'b' => 2]];

// 深度复制
$deep_copy = clone $original_array; // 或使用深拷贝函数如 array_map(function($value) { return clone $value; }, $original_array)

$deep_copy['foo'] = 'new_bar';
$deep_copy['baz']['a'] = 3;

var_dump($original_array); // 输出: ['foo' => 'bar', 'baz' => ['a' => 1, 'b' => 2]]
var_dump($deep_copy); // 输出: ['foo' => 'new_bar', 'baz' => ['a' => 3, 'b' => 2]]
Nach dem Login kopieren

Flache Kopie

Flache Kopie kopiert nur die Referenz des Quellarrays. Änderungen am Zielarray werden auch im ursprünglichen Array widergespiegelt.

$original_array = ['foo' => 'bar', 'baz' => ['a' => 1, 'b' => 2]];

// 浅复制
$shallow_copy = $original_array;

$shallow_copy['foo'] = 'new_bar';
$shallow_copy['baz']['a'] = 3;

var_dump($original_array); // 输出: ['foo' => 'new_bar', 'baz' => ['a' => 3, 'b' => 2]]
var_dump($shallow_copy); // 输出: ['foo' => 'new_bar', 'baz' => ['a' => 3, 'b' => 2]]
Nach dem Login kopieren

Leistungsunterschied

Tiefe Kopie ist ressourcenintensiver als flache Kopie, da das gesamte Quellarray durchlaufen und neue Entitäten für das Zielarray erstellt werden müssen. Flache Kopien kopieren nur Referenzen und sind daher in der Regel viel schneller als tiefe Kopien.

Praktischer Fall

Verwenden Sie Deep Copy, um eine unabhängige Sammlung von Datenbankeinträgen zu erstellen

// 从数据库获取记录
$records = $db->fetchRecords();

// 深度复制记录集合以进行独立更新
$updated_records = clone $records;
Nach dem Login kopieren

Verwenden Sie flache Kopie, um ein Array an eine Funktion zu übergeben

function updateRecord($record) {
  $record['updated'] = true;
}

$original_record = ['id' => 1, 'name' => 'John'];

// 浅复制原始记录并更新副本
$shallow_copy = $original_record;
updateRecord($shallow_copy);

// 更新会反映在原始记录中
var_dump($original_record); // 输出: ['id' => 1, 'name' => 'John', 'updated' => true]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPHP-Array-Kopierstrategie: Deep Copy und Shallow Copy, Analyse und Leistungsvergleich. 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