Küçük ama etkili bir ipucu ile sıralama için kullandığımız sort() benzeri fonksiyonlarda oluşan Türkçe karakter problemini çözebilirsiniz.

Sorunun kaynağı; sort fonksiyonunu direkt olarak kullandığımızda php çekirdeği varsayılan olarak İngilizce dilini referans alır. Haliyle İngilizce'de olmayan bir harf ile başlayan kelimeler, bu fonksiyon için harf yerine özel bir karaktermiş gibi görünür. Türkçe harf ile başlayan kelimeler, kullanılan fonksiyona göre, dizinin sonuna ya da başına yığılır.

Çözüm; php çekirdeğine küçük bir kodla Türkçe dilini de kullandığımızı söyleriz.

Örnek;

PHP:
  1. setlocale(LC_ALL,'TURKISH');
  2. $dizi = array('y','r','s','ö','a','ç','b','ğ','x');
  3. sort($dizi,SORT_LOCALE_STRING);
  4. print_r($dizi);

1. satırda yerel dilin Türkçe olduğunu bildiriyoruz ve 3. satırda karşılaştırma yaparken yerel dilin göz önünde bulundurulmasını söylüyoruz.

Notlar;
* setlocale fonksiyonunu kullanırken girdiğimiz LC_ALL argümanı ile sıralama fonksiyonu dışında bazı fonksiyonların da Türkçe'yi referans almasını sağlarız. Sadece string karşılaştırmalarında bunun olması isteniyorsa LC_ALL yerine LC_COLLATE kullanılmalı.
* SORT_LOCALE_STRING standart bir argümandır. Daha geniş bilgiyi php.net'deki ilgili başlıkta bulabilirsiniz.
* Aynı koşullar daha önce anlattığım rsort, asort ve arsort fonksiyonları içinde geçerlidir.
* String karşılaştırılmasında kullanılacak dilin Türkçe olduğunu bildirmek, x, w, q gibi Türkçe'de olmayan harflerin sıralanmasında bir problem yaratmaz.