Bagaimana saya bisa menghapus nilai duplikat dari array multi-dimensi di PHP?
Contoh array:
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => abc
[1] => def
)
[4] => Array
(
[0] => ghi
[1] => jkl
)
[5] => Array
(
[0] => mno
[1] => pql
)
)
serialize(array('a' => '1', 'b' => '1'))
berbeda dariserialize(array('b' => '1', 'a' => '1'))
. Opsi ini akan gagal untuk array yang digunakan sebagaisets
atau(hash)maps
.Sejak 5.2.9 Anda dapat menggunakan
array_unique()
jika Anda menggunakanSORT_REGULAR
flag seperti:Ini membuat fungsi membandingkan elemen untuk kesetaraan seolah
$a == $b
sedang digunakan, yang sempurna untuk kasus Anda.Keluaran
Perlu diingat, bahwa dokumentasi menyatakan:
sumber
Saya memiliki masalah yang sama tetapi saya menemukan solusi 100% berfungsi untuk itu.
sumber
Cara lain. Akan menyimpan kunci juga.
sumber
Komentar pengguna pada dokumentasi array_unique () memiliki banyak solusi untuk ini. Ini salah satunya:
Ini dari http://ca3.php.net/manual/en/function.array-unique.php#57202 .
sumber
Jika "hapus duplikat" berarti "hapus duplikat, tetapi biarkan duplikat di sana", sebuah solusi mungkin untuk menerapkan
array_unique(...)
pada "kolom pengidentifikasi" pertama dan kemudian untuk menghapus dalam array asli semua kunci, yang telah dihapus dari array kolom :Hasilnya adalah:
sumber
Ini akan menghapus nama duplikat dari array. unik dengan kunci
sumber
$array
kunci mulai dari "0". Mungkin saja$array
kunci mulai dari nomor lain jika$array
merupakan hasil dari manipulasi array sebelumnya. Gunakanarray_values
untuk mengatur ulang tombol kembali ke "0"Solusi sederhana:
sumber
Cukup gunakan opsi SORT_REGULAR sebagai parameter kedua.
sumber
jika Anda perlu menghilangkan duplikat pada kunci tertentu, seperti id mysqli, inilah fungsi sederhana
Poin Bonus Anda bisa melewati array kunci dan menambahkan foreach luar, tetapi itu akan lebih lambat 2x per kunci tambahan.
sumber
Cara yang sangat mudah dan logis untuk Unik array multi dimensi adalah sebagai berikut,
Jika Anda memiliki array seperti ini:
gunakan
foreach
untuk memecahkan ini:itu akan memberi Anda hasil sebagai berikut:
dan jika Anda ingin mengatur ulang urutan tombol,
Operasi ini akan memberi Anda nilai-nilai kunci yang diatur seperti ini:
Saya harap ini akan menghapus semuanya.
sumber
jika Anda memiliki array seperti ini:
(pengguna adalah nama array)
dan Anda ingin menghapus duplikat ... lalu:
bisa menjadi solusinya: P
sumber
Solusi yang mudah dibaca, mungkin bukan yang paling efisien:
sumber
Seperti yang orang katakan
array_unique()
sangat lambat, di sini adalah potongan yang saya gunakan untuk array multidimensi satu tingkat.Referensi pertama yang dikontribusikan pengguna mencatat
array_unique()
halaman fungsi di php.netsumber
$output = array_map('unserialize', array_keys($result));
Banyak orang bertanya kepada saya bagaimana membuat array multidimensi Unik. Saya telah mengambil referensi dari komentar Anda dan itu membantu saya.
Pertama-tama, Terima kasih kepada @jeromegamez @daveiler untuk solusi Anda. Tetapi setiap kali saya memberikan jawaban, mereka bertanya kepada saya bagaimana 'serialisasi' dan 'unserialize' ini bekerja. Itu sebabnya saya ingin berbagi alasan ini dengan Anda sehingga akan membantu lebih banyak orang untuk memahami konsep di balik ini.
Saya menjelaskan mengapa kami menggunakan 'serialize' dan 'unserialize' dalam langkah-langkah:
Langkah 1: Konversi array multidimensi menjadi array satu dimensi
Untuk mengonversi array multidimensi menjadi array satu dimensi, pertama-tama buat representasi aliran byte dari semua elemen (termasuk array bersarang) di dalam array. fungsi serialize () dapat menghasilkan representasi stream byte dari suatu nilai. Untuk menghasilkan representasi aliran byte dari semua elemen, panggil fungsi serialize () di dalam fungsi array_map () sebagai fungsi callback. Hasilnya akan menjadi array satu dimensi tidak peduli berapa banyak level yang dimiliki array multidimensi.
Langkah 2: Buat nilainya unik
Untuk membuat array satu dimensi ini unik, gunakan fungsi array_unique ().
Langkah 3: Kembalikan ke array multidimensi
Meskipun array sekarang unik, nilainya terlihat seperti representasi stream byte. Untuk mengembalikannya ke array multidimensi, gunakan fungsi unserialize ().
Terima kasih sekali lagi untuk semua ini.
sumber
Alternatif untuk bersambung dan unik
* /
sumber
Jika Anda memiliki array seperti ini
dan Anda ingin mendapatkan array seperti ini:
atau
kode berikut dapat membantu
sumber
Saya telah memberikan masalah ini banyak pemikiran dan telah memutuskan bahwa solusi optimal harus mengikuti dua aturan.
Dengan pemikiran itu dan mengingat semua keanehan PHP, di bawah ini adalah solusi yang saya buat. Tidak seperti beberapa jawaban lain, ia memiliki kemampuan untuk menghapus elemen berdasarkan kunci apa pun yang Anda inginkan. Array input diharapkan menjadi tombol angka.
Satu-satunya kelemahan adalah bahwa kunci tidak berurutan ketika iterasi selesai. Ini bukan masalah jika Anda selanjutnya hanya menggunakan foreach loop, tetapi jika Anda perlu menggunakan for loop, Anda dapat menempatkan
$input = array_values($input);
setelah di atas untuk memberi nomor baru tombol.sumber
Berdasarkan pada Jawaban yang ditandai sebagai benar, tambahkan jawaban saya. Kode kecil ditambahkan hanya untuk mengatur ulang indeks-
sumber