Rumah > Artikel > pembangunan bahagian belakang > Pertarungan kaedah salinan dalam tatasusunan PHP: kelajuan, penggunaan memori dan kebolehpercayaan
Perbandingan kaedah salinan dalam PHP: Kelajuan: klon adalah yang terpantas, diikuti oleh json_encode() + json_decode(). Penggunaan memori: json_encode() + json_decode() adalah paling sedikit, serialize() + unserialize() adalah yang paling banyak. Kebolehpercayaan: Semua kaedah memastikan tatasusunan asal tidak terjejas oleh pengubahsuaian pada salinan.
Pertandingan Kaedah Salin Dalam Tatasusunan PHP: Kelajuan, Penggunaan Memori dan Kebolehpercayaan
Pengenalan
Penyalinan dalam adalah penting apabila berurusan dengan tatasusunan berbilang dimensi dalam PHP. Ia mencipta salinan sebenar tatasusunan dan berguna apabila anda perlu mengubah suai elemen dalam salinan tanpa menjejaskan tatasusunan asal. Artikel ini akan membandingkan empat kaedah salinan dalam PHP yang popular:
kaedah
clone
array_map(clone, $array)
serialize() + unserialize()
json_encode() + json_decode()
实战案例
为了进行比较,我们创建一个包含 1,000 个元素的多维数组:
$array = range(1, 1000); $array[] = ['a', 'b', 'c']; $array[] = ['x' => 1, 'y' => 2];
速度测试
使用 microtime()
计时每个方法的执行时间:
$time = microtime(true); $cloneCopy = clone $array; $microtime = microtime(true) - $time; $time = microtime(true); $arrayMapCloneCopy = array_map(clone, $array); $microtime2 = microtime(true) - $time; $time = microtime(true); $serializeCloneCopy = unserialize(serialize($array)); $microtime3 = microtime(true) - $time; $time = microtime(true); $jsonCloneCopy = json_decode(json_encode($array), true); $microtime4 = microtime(true) - $time;
结果:
方法 | 时间 (秒) |
---|---|
clone |
8.9e-6 |
array_map(clone, $array) |
2.1e-5 |
serialize() + unserialize() |
8.1e-5 |
json_encode() + json_decode() |
4.7e-5 |
内存占用测试
使用 memory_get_usage()
测量每个方法的内存占用:
$memory = memory_get_usage(); $cloneCopy = clone $array; $memory2 = memory_get_usage() - $memory; $memory = memory_get_usage(); $arrayMapCloneCopy = array_map(clone, $array); $memory3 = memory_get_usage() - $memory; $memory = memory_get_usage(); $serializeCloneCopy = unserialize(serialize($array)); $memory4 = memory_get_usage() - $memory; $memory = memory_get_usage(); $jsonCloneCopy = json_decode(json_encode($array), true); $memory5 = memory_get_usage() - $memory;
结果:
方法 | 内存占用 (字节) |
---|---|
clone |
56,000 |
array_map(clone, $array) |
88,000 |
serialize() + unserialize() |
112,000 |
json_encode() + json_decode() |
64,000 |
Sebagai perbandingan , kami mencipta tatasusunan berbilang dimensi bagi 1,000 elemen:
$cloneCopy[0] = 100; $arrayMapCloneCopy[0] = 100; $serializeCloneCopy[0] = 100; $jsonCloneCopy[0] = 100; echo $array[0]; // 输出:1 assert($array[0] == 1);
microtime()
untuk memasa masa pelaksanaan setiap kaedah: 🎜rrreee🎜🎜klon
🎜8.9e-6
🎜🎜array_map(clone, $array)
🎜2.1e-5 🎜🎜<tr>
<td>
<code>serialize() + unserialize()
🎜8.1e-5
🎜🎜json_encode( ) + json_decode()
🎜4.7e-5
🎜🎜🎜🎜🎜🎜Ujian penggunaan memori🎜🎜Gunakan memory_get_usage()
untuk mengukur penggunaan memori setiap kaedah: 🎜rrreee🎜🎜Hasil: 🎜🎜klon
🎜56,000
🎜🎜array_map(clone, $array)
🎜88,000
🎜🎜serialize() + unserialize()
🎜112,000
🎜🎜json_encode() + json_decode()
🎜64,000
🎜🎜🎜🎜🎜🎜Ujian kebolehpercayaan🎜🎜Ujian kebolehpercayaan memastikan bahawa apabila mengubah suai salinan Tatasusunan asal kekal tidak berubah : 🎜rreeeeAtas ialah kandungan terperinci Pertarungan kaedah salinan dalam tatasusunan PHP: kelajuan, penggunaan memori dan kebolehpercayaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!