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);
Array
(
[0] => Ahmet
[1] => Ayşe
[2] => Mehmet
[3] => Zeynep
[4] => İsmail
)
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);
Array
(
[0] => Ahmet
[1] => Ayşe
[2] => İsmail
[3] => Mehmet
[4] => Zeynep
)
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)