DEV Community

Barış AKSU
Barış AKSU

Posted on

PHP'de Türkçe Karakterli Dizileri Doğru Sıralama

PHP'de strcmp() fonksiyonu kullanılarak yapılan sıralama işlemleri, Türkçe karakterlerin farklı ASCII değerleri nedeniyle istenmeyen sonuçlara yol açıyor. Bu makalede, Türkçe karakterleri doğru bir şekilde sıralamak için nasıl bir yaklaşım izleyebileceğimizi ele alacağız.

Sorunun Tanımı

Örnek bir PHP kodu düşünelim:

$isimler = array("Zeynep", "Mehmet", "Ayşe", "Ahmet", "İsmail");

usort($isimler, function ($a, $b) {
    return strcmp($a, $b);
});

print_r($isimler);
Enter fullscreen mode Exit fullscreen mode
Array
(
    [0] => Ahmet
    [1] => Ayşe
    [2] => Mehmet
    [3] => Zeynep
    [4] => İsmail
)

Enter fullscreen mode Exit fullscreen mode

Yukarıdaki kodda, bir dizi içerisinde farklı isimler bulunmaktadır. usort() fonksiyonu ile diziyi sıralarken strcmp() fonksiyonu kullanılmıştır. Ancak, Türkçe karakterlerin ASCII değerlerinden kaynaklanan farklılıklar nedeniyle "İsmail" ismi diğer kelimelerin sonuna yerleşmektedir.

Çözüm: strcoll() Fonksiyonu ve setlocale()

Türkçe karakterlerin doğru bir şekilde sıralanabilmesi için strcoll() fonksiyonunu kullanabiliriz. Aynı zamanda, yerel ayarları (locale) doğru bir şekilde ayarlamak da önemlidir. İşte düzeltilmiş kod:

$isimler = array("Zeynep", "Mehmet", "Ayşe", "Ahmet", "İsmail");
setlocale(LC_COLLATE, 'tr_TR.UTF-8'); // Türkçe sıralama için gerekli ayar

usort($isimler, function ($a, $b) {
    return strcoll($a, $b); // Türkçe'ye uygun karşılaştırma fonksiyonu
});

print_r($isimler);
Enter fullscreen mode Exit fullscreen mode
Array
(
    [0] => Ahmet
    [1] => Ayşe
    [2] => İsmail
    [3] => Mehmet
    [4] => Zeynep
)

Enter fullscreen mode Exit fullscreen mode

Yukarıdaki kodda, setlocale() fonksiyonuyla Türkçe sıralama için gerekli yerel ayarlar yapılmıştır. Ardından, strcoll() fonksiyonu ile Türkçe karakterlere uygun bir şekilde sıralama gerçekleştirilmiştir. Sonuç olarak, "İsmail" kelimesi diğer kelimelerle uygun bir şekilde sıralanacaktır.

Sonuç

strcoll() fonksiyonunu kullanarak ve yerel ayarları düzgün bir şekilde ayarlayarak, Türkçe karakterlerin doğru sıralanması sağlanabilir. Bu sayede, daha tutarlı ve beklenen sonuçlar elde edilebilir.

Top comments (0)