Rumah > pembangunan bahagian belakang > masalah PHP > Bolehkah PHP Array Deduplication dilaksanakan menggunakan fungsi tanpa nama?

Bolehkah PHP Array Deduplication dilaksanakan menggunakan fungsi tanpa nama?

Karen Carpenter
Lepaskan: 2025-03-03 16:45:16
asal
494 orang telah melayarinya

Bolehkah deduplikasi array PHP dilaksanakan menggunakan fungsi tanpa nama? Walaupun PHP tidak mempunyai fungsi terbina dalam yang direka khusus untuk tugas ini menggunakan fungsi tanpa nama secara langsung, anda boleh memanfaatkan fungsi tanpa nama dalam fungsi array seperti

atau

untuk mencapai deduplikasi dengan logik tersuai. Sebagai contoh, jika anda perlu deduplikasi berdasarkan kunci tertentu dalam pelbagai array bersekutu, mudah array_unique() tidak akan mencukupi. Fungsi tanpa nama menyediakan fleksibiliti untuk mengendalikan senario tersebut. Inilah caranya: array_filter() array_unique()

Kod ini menggunakan
$array = [
    ['id' => 1, 'name' => 'apple'],
    ['id' => 2, 'name' => 'banana'],
    ['id' => 1, 'name' => 'apple'],
    ['id' => 3, 'name' => 'orange']
];

$uniqueArray = array_unique($array, SORT_REGULAR); //This won't work as expected

$uniqueArray = array_reduce($array, function ($carry, $item) {
    $key = $item['id']; //Deduplication based on 'id'
    if (!isset($carry[$key])) {
        $carry[$key] = $item;
    }
    return $carry;
}, []);

$uniqueArray = array_values($uniqueArray); //Convert back to indexed array

print_r($uniqueArray);
Salin selepas log masuk
dengan fungsi tanpa nama untuk meleleh melalui array. Fungsi tanpa nama memeriksa jika elemen dengan 'id' yang sama sudah ada dalam array

(yang mengumpulkan unsur -unsur unik). Jika tidak, ia menambah elemen. Akhirnya, menukarkan array bersekutu yang terhasil kembali ke array yang diindeks secara berangka. Walau bagaimanapun, kecekapan sangat bergantung kepada pelaksanaan dan saiz array. Untuk deduplikasi mudah berdasarkan nilai, array_reduce umumnya lebih cekap. Overhead memanggil fungsi tanpa nama untuk setiap elemen dalam array yang besar boleh menjadi ketara. $carry array_values Kecekapan juga bergantung pada fungsi array yang dipilih.

, sementara serba boleh, mungkin bukan yang terpantas untuk semua senario. Untuk tatasusunan besar, menggunakan algoritma tersuai yang dilaksanakan dengan gelung dan jadual hash (mis., Menggunakan

untuk objek atau array mudah untuk nilai skalar) boleh menawarkan prestasi yang lebih baik. Kaedah adalah pelbagai:

  • array_unique(): Untuk deduplikasi berasaskan nilai mudah, array_unique() biasanya pilihan terpantas. Ia dioptimumkan untuk tugas khusus ini. Overhead ini boleh menjadi penting untuk tatasusunan besar. Pendekatan ini mengelakkan fungsi panggilan overhead
  • atau
  • . Sekiranya array sudah disusun, algoritma tertentu boleh mengambil kesempatan daripada itu untuk meningkatkan kecekapan. Untuk deduplikasi mudah, tongkat dengan . Untuk senario yang kompleks dan dataset yang besar, profil pendekatan yang berbeza (termasuk algoritma tersuai) adalah penting untuk menentukan penyelesaian yang paling berkesan. array_filter() fleksibiliti array_reduce(). Mereka membolehkan anda menentukan logik deduplikasi tersuai yang tidak disokong secara langsung oleh fungsi terbina dalam seperti . Contohnya: Deduplikasi berdasarkan kunci khusus dalam array bersekutu:
  • seperti yang ditunjukkan dalam contoh pertama, fungsi tanpa nama adalah sesuai untuk ini. sifat). Sekiranya keperluan deduplikasi anda mudah, fungsi terbina dalam seperti
  • biasanya disukai untuk kecekapan mereka. Fungsi tanpa nama bersinar apabila anda memerlukan kuasa logik tersuai untuk mengendalikan senario deduplikasi yang tidak remeh. Sentiasa penanda aras pendekatan yang berbeza untuk menentukan keseimbangan terbaik antara prestasi dan kebolehbacaan kod untuk kes penggunaan khusus anda.

Atas ialah kandungan terperinci Bolehkah PHP Array Deduplication dilaksanakan menggunakan fungsi tanpa nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan