Menu

PHP array_unique(): Tekrarlanan Değerleri Kaldırma

array_unique($array) tekrarlanan değerleri kaldırır ve her birinin ilk geçişini orijinal anahtarıyla tutar. Sonucu yeniden indekslemeyi, büyük küçük harfi yok sayarak tekrarları kaldırmayı, çok boyutlu bir diziyi benzersiz yapmayı ve tekrarları saymayı veya bulmayı öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

array_unique($array) diziyi tekrarlanan değerler kaldırılmış olarak döndürür. Her değerin ilk geçişi orijinal anahtarı altında kalır ve sonraki kopyalar atılır.

İlk sonuç 0, 1, 3 anahtarlarını tutar: her değerin ilk göründüğü konumlar. Temiz bir liste istediğinizde, örneğin json_encode öncesinde, çağrıyı array_values() ile sarın.

array_unique iki değerin aynı olduğuna nasıl karar verir

Varsayılan olarak her değer bir dizgeye çevrilir ve dizgeler karşılaştırılır. Yani 1, "1" ve 1.0 aynı değer sayılır ve ilki kazanır. İkinci argüman karşılaştırmayı değiştirir.

Bayrakİki değer şu durumda tekrardır
SORT_STRING (varsayılan)(string) $a === (string) $b
SORT_REGULAR$a == $b
SORT_NUMERICsayı olarak eşitlerse

Varsayılan ayarda "01" kalır, çünkü "01" dizgesi "1" dizgesi değildir. SORT_REGULAR ile atılır, çünkü "01" == 1 true'dur. Gevşek karşılaştırma ayrıca true boolean değerinin boş olmayan herhangi bir değerle eşleşmesine izin verir. Karışık türlerle buna güvenmeden önce çıktıyı kontrol edin; kurallar karşılaştırma operatörleri sayfasında açıklanıyor.

Büyük küçük harfi yok sayarak tekrarları kaldırma

array_unique büyük küçük harfe duyarlıdır: "PHP" ve "php" farklıdır. Onları tekrar sayıp ilkinin orijinal yazımını korumak için benzersiz anahtarları küçük harfe çevrilmiş bir kopyada bulun ve o anahtarları orijinalden tutun.

array_map aynı anahtarlarla küçük harfli bir kopya oluşturur, array_unique ilk geçişlerin anahtarlarını tutar ve array_intersect_key o anahtarları orijinal diziden seçer. Aksanlı veya Japonca metinler için strtolower yerine mb_strtolower kullanın.

Çok boyutlu bir dizide array_unique

Bayrak olmadan array_unique her satırı "Array" dizgesine çevirir, bu yüzden tüm satırlar aynı görünür ve her satır için bir "Array to string conversion" uyarısıyla yalnızca ilki kalır. Satırları bütün olarak karşılaştırmak için SORT_REGULAR verin. Tek bir alanın her değeri için bir satır tutmak üzere null ve bir indeks anahtarıyla array_column daha basittir.

İkinci yaklaşım her e-posta için son satırı tutar, çünkü sonraki her satır aynı anahtar altında öncekinin üzerine yazar. array_column sayfası indeks anahtarını ayrıntılı açıklar.

Tekrarlanan değerleri bulma ve sayma

array_count_values() her değerin kaç kez geçtiğini döndürür. Bunu birden büyük sayılar için süzün, tekrarları elde edersiniz.

Son kontrol, bir dizide hiç tekrar olup olmadığını test eden yaygın bir tek satırlıktır.

Büyük diziler için daha hızlı benzersiz değerler

array_unique karşılaştırmadan önce her değeri bir dizgeye çevirir; binlerce değer için bu sorun değildir. Büyük bir tam sayı veya dizge listesi için diziyi ters çevirmek daha hızlıdır: değerler anahtar olur ve anahtarlar tanım gereği benzersizdir.

Süreler çalıştırmadan çalıştırmaya değişir, ama ters çevirme sürümü genellikle birkaç kat daha hızlıdır. Yalnızca dizi anahtarı olabilen değerler (tam sayılar ve dizgeler) için çalışır ve "5" gibi sayısal dizgeler tam sayı olarak geri gelir.

Sıkça Sorulan Sorular

array_unique anahtarları korur mu?

Evet. Her değerin ilk geçişini orijinal anahtarı altında tutar ve sonrakileri atar, bu yüzden anahtarlarda boşluklar olabilir. Onları 0'dan yeniden numaralamak için array_values(array_unique($arr)) kullanın.

array_unique'i çok boyutlu bir dizide nasıl kullanırım?

Satırların bütün olarak karşılaştırılması için SORT_REGULAR verin: array_unique($rows, SORT_REGULAR). Bir alanın her değeri için bir satır tutmak üzere, örneğin e-posta başına bir satır, satırları o alana göre indeksleyin: array_column($rows, null, 'email') her e-posta için son satırı tutar.

Büyük küçük harfi yok sayarak tekrarları nasıl kaldırırım?

Benzersiz anahtarları küçük harfe çevrilmiş bir kopyada bulun ve o anahtarları orijinalden tutun: array_intersect_key($arr, array_unique(array_map('strtolower', $arr))). ASCII dışındaki metinler için mb_strtolower kullanın.

Bir PHP dizisinde hangi değerlerin tekrarlandığını nasıl bulurum?

Onları array_count_values($arr) ile sayın, sonra birden büyük sayıları tutun: array_keys(array_filter(array_count_values($arr), fn($n) => $n > 1)). array_count_values yalnızca dizgeler ve tam sayılarla çalışır.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA