array_unique($array) mengembalikan array yang nilai duplikatnya sudah dihapus. Kemunculan pertama setiap nilai tetap ada di key aslinya, dan salinan yang muncul belakangan dibuang.
Hasil pertama mempertahankan key 0, 1, 3: posisi tempat setiap nilai pertama kali muncul. Bungkus panggilannya dengan array_values() saat kamu ingin list yang rapi, misalnya sebelum json_encode.
Cara array_unique menentukan dua nilai sama
Secara bawaan, setiap nilai dikonversi menjadi string, lalu string-string itu dibandingkan. Jadi 1, "1", dan 1.0 dianggap nilai yang sama, dan yang pertama yang menang. Argumen kedua mengubah cara membandingkannya.
| Flag | Dua nilai dianggap duplikat saat |
|---|---|
SORT_STRING (bawaan) | (string) $a === (string) $b |
SORT_REGULAR | $a == $b |
SORT_NUMERIC | keduanya sama sebagai angka |
Dengan mode bawaan, "01" tetap ada karena string "01" bukan string "1". Dengan SORT_REGULAR, nilai itu dibuang karena "01" == 1 bernilai true. Perbandingan longgar juga membuat boolean true cocok dengan nilai apa pun yang tidak kosong. Periksa output-nya sebelum mengandalkannya untuk tipe campuran; halaman operator perbandingan menjelaskan aturannya.
Menghapus duplikat tanpa membedakan huruf besar kecil
array_unique membedakan huruf besar kecil: "PHP" dan "php" berbeda. Untuk menganggap keduanya duplikat tetapi tetap menyimpan ejaan asli dari yang pertama, cari key unik pada salinan berhuruf kecil, lalu ambil key itu dari array aslinya.
array_map membuat salinan berhuruf kecil dengan key yang sama, array_unique menyimpan key dari kemunculan pertama, dan array_intersect_key mengambil key-key itu dari array aslinya. Untuk teks beraksen atau berbahasa Jepang, pakai mb_strtolower sebagai ganti strtolower.
array_unique pada array multidimensi
Tanpa flag, array_unique mengubah setiap baris menjadi string "Array", sehingga semua baris terlihat sama dan hanya yang pertama yang bertahan, disertai warning "Array to string conversion" untuk setiap baris. Berikan SORT_REGULAR untuk membandingkan seluruh baris. Untuk menyimpan satu baris per nilai dari satu field, array_column dengan null dan index key lebih sederhana.
Cara kedua menyimpan baris terakhir untuk setiap email, karena setiap baris yang belakangan menimpa baris sebelumnya di key yang sama. Halaman array_column menjelaskan index key secara rinci.
Menemukan dan menghitung nilai duplikat
array_count_values() mengembalikan berapa kali setiap nilai muncul. Filter hasilnya untuk jumlah di atas satu, dan kamu mendapatkan duplikatnya.
Pengecekan terakhir adalah satu baris kode yang umum untuk menguji apakah sebuah array punya duplikat sama sekali.
Nilai unik yang lebih cepat untuk array besar
array_unique mengonversi setiap nilai menjadi string sebelum membandingkan, dan itu tidak masalah untuk ribuan nilai. Untuk list besar berisi integer atau string, membalik array (flip) lebih cepat: nilai menjadi key, dan key pasti unik.
Waktunya berubah dari satu run ke run berikutnya, tetapi versi flip biasanya beberapa kali lebih cepat. Cara ini hanya berlaku untuk nilai yang bisa menjadi key array (integer dan string), dan string numerik seperti "5" kembali sebagai integer.
Pertanyaan yang sering diajukan
Apakah array_unique mempertahankan key?
Ya. Fungsi ini menyimpan kemunculan pertama setiap nilai di key aslinya dan membuang yang muncul belakangan, jadi key-nya bisa punya celah. Pakai array_values(array_unique($arr)) untuk menomorinya ulang mulai dari 0.
Bagaimana cara memakai array_unique pada array multidimensi?
Berikan SORT_REGULAR supaya seluruh baris dibandingkan: array_unique($rows, SORT_REGULAR). Untuk menyimpan satu baris per nilai sebuah field, misalnya satu baris per email, indeks baris-barisnya dengan field itu: array_column($rows, null, 'email') menyimpan baris terakhir untuk setiap email.
Bagaimana cara menghapus duplikat tanpa membedakan huruf besar kecil?
Cari key unik pada salinan yang sudah diubah ke huruf kecil, lalu ambil key itu dari array aslinya: array_intersect_key($arr, array_unique(array_map('strtolower', $arr))). Pakai mb_strtolower untuk teks di luar ASCII.
Bagaimana cara menemukan nilai yang duplikat di array PHP?
Hitung dengan array_count_values($arr), lalu simpan yang jumlahnya lebih dari satu: array_keys(array_filter(array_count_values($arr), fn($n) => $n > 1)). array_count_values hanya bekerja untuk string dan integer.