PHP 配列をディープコピーするためのメソッド: array_map()、clone()、JSON シリアル化と逆シリアル化、recurse_copy()。パフォーマンスの比較では、PHP 7.4 バージョンでは recurse_copy() のパフォーマンスが最も高く、次に array_map() と clone() のパフォーマンスが比較的低いですが、複雑なデータ構造のコピーに適しています。
PHP での配列のコピーは必ずしも簡単ではありません。デフォルトでは、PHP はシャロー コピーを使用します。これは、実際のデータではなく、配列内の参照のみをコピーすることを意味します。これにより、配列のコピーを個別に処理する必要がある場合に問題が発生する可能性があります。
配列をディープ コピーする方法は次のとおりです。
array_map()
各要素を再帰的に処理します。function deepCopy1($array) { return array_map(function($value) { if (is_array($value)) { return deepCopy1($value); } else { return $value; } }, $array); }
配列を再帰的にコピーします
function deepCopy2($array) { if (is_array($array)) { return array_map(function($value) { return clone $value; }, $array); } else { return $array; } }
function deepCopy3($array) { return json_decode(json_encode($array), true); }
関数を使用します (PHP にのみ適用可能)。 7.4)
function deepCopy4($array) { return recurse_copy($array); }
$array = [ 'name' => 'John Doe', 'age' => 30, 'address' => [ 'street' => 'Main Street', 'city' => 'New York', 'state' => 'NY' ] ];
$start = microtime(true); deepCopy1($array); $end = microtime(true); $time1 = $end - $start; $start = microtime(true); deepCopy2($array); $end = microtime(true); $time2 = $end - $start; $start = microtime(true); deepCopy3($array); $end = microtime(true); $time3 = $end - $start; $start = microtime(true); deepCopy4($array); $end = microtime(true); $time4 = $end - $start;
時間 (秒) | |
---|---|
array_map ()
| 0.000013|
clone()
| 0.000014|
json_encode/ json_decode #0.000021 |
|
# 0.000009
|
recurse_copy() 関数は、PHP 7.4 バージョンのパフォーマンスで最高のものを提供します。
array_map() と clone()
による。 json_encode
/json_decode
メソッドはパフォーマンスが比較的低いですが、複雑なデータ構造のディープ コピーが必要な状況に適しています。
以上がPHP での配列のディープ コピーに関する包括的なガイド: メソッド分析とパフォーマンスの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。