array_unique() ialah fungsi terbina dalam dengan prestasi terbaik untuk penyahduplikasi tatasusunan. Kaedah jadual cincang mempunyai prestasi terbaik untuk fungsi tersuai Nilai cincang digunakan sebagai kunci dan nilainya kosong. Kaedah round-robin adalah mudah untuk dilaksanakan tetapi tidak cekap Adalah disyorkan untuk menggunakan fungsi terbina dalam atau tersuai untuk penduaan. array_unique() mengambil masa 0.02 saat, array_reverse + array_filter() mengambil masa 0.04 saat, kaedah jadual cincang mengambil masa 0.01 saat, dan kaedah round-robin mengambil masa 0.39 saat. . PHP menyediakan beberapa fungsi terbina dalam dan tersuai untuk melakukan ini. Artikel ini akan membandingkan prestasi fungsi ini dan memberikan contoh praktikal.
Fungsi terbina dalam
array_reverse()
+ array_filter()
: Gunakan array_reverse()
untuk membalikkan tatasusunan, dan kemudian gabungkannya dengan array_filter() Alih keluar elemen pendua.
Kaedah jadual cincang
: Cipta jadual cincang, kuncinya ialah nilai dalam tatasusunan dan nilainya kosong. Lelaran ke atas tatasusunan, menambah setiap nilai pada jadual cincang. Tatasusunan nyahduplikasi ialah kunci jadual cincang.array_unique()
:内置函数,通过 哈希表 进行去重,效率较高。array_reverse()
+ array_filter()
:使用 array_reverse()
逆序数组,然后结合 array_filter()
移除重复元素。自定义函数
实战案例
假设我们有一个包含 100 万个整数的数组 $array
。
$array = range(1, 1000000); $iterations = 100;
性能测试
function test_array_unique($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_unique($array); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "array_unique: $avg_time seconds\n"; } function test_array_reverse_array_filter($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_filter(array_reverse($array), 'array_unique'); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "array_reverse + array_filter: $avg_time seconds\n"; } function test_hash_table($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_values(array_filter($array, function ($value) { static $hash_table = []; if (isset($hash_table[$value])) { return false; } $hash_table[$value] = true; return true; })); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "hash table: $avg_time seconds\n"; } function test_loop($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_values(array_filter($array, function ($value) use (&$array) { for ($j = 0; $j < count($array); $j++) { if ($j == $i) { continue; } if ($value == $array[$j]) { return false; } } return true; })); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "loop: $avg_time seconds\n"; } test_array_unique($array, $iterations); test_array_reverse_array_filter($array, $iterations); test_hash_table($array, $iterations); test_loop($array, $iterations);
结果
使用 100 万个整数的数组,每个函数的平均运行时间如下:
结论
根据测试结果,array_unique()
是去重数组最快的内置函数,而哈希表法是性能最优的自定义函数。循环法虽然容易实现,但效率较低。在处理大型数组时,建议采用 array_unique()
: Gunakan dua penunjuk untuk melintasi tatasusunan. Penunjuk 1 bertanggungjawab untuk gelung luar, dan penunjuk 2 bertanggungjawab untuk gelung dalam. Jika nilai penuding luar tidak berada dalam nilai penuding dalam, nilai itu ditambahkan pada tatasusunan hasil.
$array
yang mengandungi 1 juta integer. 🎜rrreee🎜🎜Ujian prestasi🎜🎜rrreee🎜🎜Keputusan🎜🎜🎜Menggunakan tatasusunan 1 juta integer, purata masa berjalan bagi setiap fungsi adalah seperti berikut: 🎜array 🎜🎜array_02:array_02 : 0.04 saat 🎜Kaedah jadual cincang: 0.01 saat🎜Kaedah gelung: 0.39 saat🎜🎜Kesimpulan🎜🎜🎜Mengikut keputusan ujian, array_unique()
atau kaedah jadual cincang untuk penduaan. 🎜Atas ialah kandungan terperinci Perbandingan prestasi menggunakan fungsi terbina dalam PHP dan fungsi tersuai untuk menyahduplikasi tatasusunan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!