ホームページ  >  記事  >  バックエンド開発  >  PHP 配列コピー戦略: ディープ コピーとシャロー コピー、解析とパフォーマンスの比較

PHP 配列コピー戦略: ディープ コピーとシャロー コピー、解析とパフォーマンスの比較

WBOY
WBOYオリジナル
2024-05-02 14:57:01654ブラウズ

PHP では、配列コピーにはディープ コピーとシャロー コピーという 2 つの戦略があります。ディープ コピーではソース配列の独立したコピーが作成され、一方の配列に対する変更はもう一方の配列には影響しません。浅いコピーは配列の参照のみをコピーし、一方の配列に対する変更はもう一方の配列に反映されます。深いコピーでは、配列を走査して新しいエンティティを作成する必要があるため、浅いコピーよりもリソースを多く消費しますが、浅いコピーは参照のみをコピーできるため、高速です。ディープ コピーはデータベース レコードの独立したコレクションを作成するために使用され、シャロー コピーは配列を関数に渡すために使用されます。

PHP 配列コピー戦略: ディープ コピーとシャロー コピー、解析とパフォーマンスの比較

PHP 配列コピー戦略: 深いコピーと浅いコピー

PHP では、配列変数は参照によって渡されます。これは、元の配列に加えられた変更は、その配列を参照するすべての変数に反映されることを意味します。ただし、配列に独立した変更を加えるために配列のコピーを作成する必要がある場合は、深いコピーと浅いコピーの違いを理解する必要があります。

ディープ コピー

ディープ コピーは、ソース アレイの完全に独立したコピーをデスティネーション アレイに作成します。宛先配列を変更しても元の配列には影響しませんし、その逆も同様です。

$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]]

浅いコピー

浅いコピーは、ソース配列の参照のみをコピーします。宛先配列への変更は、元の配列にも反映されます。

$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]]

パフォーマンスの違い

深いコピーは、ソース配列全体を走査し、ターゲット配列に対して新しいエンティティを作成する必要があるため、浅いコピーよりもリソースを大量に消費します。浅いコピーは参照のみをコピーするため、通常は深いコピーよりもはるかに高速です。

実際的なケース

ディープ コピーを使用して独立したデータベース レコード コレクションを作成する

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

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

シャロー コピーを使用して配列を関数に渡す

うーん

以上がPHP 配列コピー戦略: ディープ コピーとシャロー コピー、解析とパフォーマンスの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。