PHP에서는 array_merge_recursive(), json_encode()/json_decode() 및 clone 메소드를 사용하여 배열을 복사할 수 있습니다. array_merge_recursive()는 중첩된 배열을 재귀적으로 병합하지만 속도가 느립니다. json_encode()/json_decode()는 더 빠르지만 메모리를 소비합니다. 복제는 가장 빠르지만 객체(배열 포함)에서만 작동합니다.
PHP에서 배열을 깊게 복사하는 다양한 방법 살펴보기: 성능, 장점 및 단점
소개
배열 복사는 PHP에서 일반적인 작업입니다. 그러나 기본 할당 연산자는 배열의 복사본을 생성하지 않지만 원본 배열에 대한 참조를 생성합니다. 경우에 따라 이는 의도하지 않은 결과를 초래할 수 있습니다. 따라서 PHP에서 배열을 깊게 복사하는 다양한 방법과 그 장단점을 이해하는 것이 중요합니다.
방법 1: array_merge_recursive()
array_merge_recursive()
이 함수는 여러 배열을 새 배열로 병합하는 동시에 중첩된 배열을 재귀적으로 병합합니다. 배열의 전체 복사본을 만드는 데 사용할 수 있습니다. 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()
이 함수는 PHP 변수를 JSON 문자열, json_decode()로 변환합니다.
함수는 JSON 문자열을 PHP 변수로 변환합니다. 이러한 함수를 사용하여 배열의 전체 복사본을 만들 수 있습니다. 🎜rrreee🎜🎜장점: 🎜🎜array_merge_recursive()
에 비해 속도가 더 빠릅니다. clone
사용🎜🎜🎜객체 복제는 원본 배열과 완전히 독립적인 복사본을 생성하므로 배열에서도 작동합니다. 🎜rrreee🎜🎜장점: 🎜🎜array_merge_recursive()
, json_encode()/json_decode()
및 clone
을 사용하여 3개의 딥 복사본을 생성했습니다. 마지막으로 var_dump()
를 사용하여 복사본이 원본 배열과 다른지 확인하고 결과는 true
입니다. 이는 복사본이 원본 배열의 독립적인 인스턴스임을 나타냅니다. . 🎜위 내용은 PHP 배열 깊은 복사에 대한 다양한 접근 방식 살펴보기: 성능, 장단점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!