Saya bekerja dengan array satu dimensi di PHP. Saya ingin mendeteksi keberadaan nilai duplikat, lalu menghitung jumlah nilai duplikat dan mengeluarkan hasilnya. Misalnya, diberikan array berikut:
$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');
Saya ingin mencetak:
apple (2)
orange
pear (2)
banana
kiwi (3)
Adakah saran tentang cara mengatasi masalah ini?
Terima kasih.
Mike
sumber
array_unique($array, SORT_REGULAR)
memaksa PHP untuk memeriksa elemen secara normal tanpa mengubah tipenya, tetapi ini adalah perbandingan yang longgar. Jadi contoh berbeda dari satu kelas dengan konten yang sama akan menjadi unik.sumber
return array_values(array_unique(array_diff_key($a, array_unique($a))));
Anda bisa mencoba mengubah array itu menjadi array asosiatif dengan buah-buahan sebagai kunci dan jumlah kemunculan sebagai nilai. Agak bertele-tele, tetapi terlihat seperti:
sumber
array_count_values
Untuk menghilangkan penggunaan
array_unique()
. Untuk mendeteksi apakah ada gunanyacount(array_unique())
dan bandingkancount($array)
.sumber
Masukkan mereka ke dalam
map
(kodesemu)sumber
Mungkin sesuatu seperti ini (kode belum teruji tetapi harus memberi Anda ide)?
Kemudian Anda akan mendapatkan array baru dengan nilai sebagai kunci dan nilainya adalah berapa kali nilai tersebut ada dalam array asli.
sumber
array_count_values
sumber
Saya tidak menemukan jawaban yang saya cari, jadi saya menulis fungsi ini. Ini akan membuat sebuah array yang hanya berisi duplikat antara dua array, tetapi tidak mencetak berapa kali sebuah elemen digandakan, jadi itu tidak menjawab pertanyaan secara langsung, tapi saya berharap itu akan membantu seseorang dalam situasi saya.
Keluaran:
sumber
Metode sederhana:
sumber