acil yardım... php, array, sort, turkish problem
arkadaşlar, 3 gündür uğraşmama rağmen, türkçe olarak diziyi sıralayamıyorum. setlocale denedim, öyle sort ettim olmadı. Yardımlarınız için şimdiden teşekkürler.
<?php
$alfabe = array('a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h', 'ı', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'ö', 'p', 'r', 's', 'ş', 't', 'u', 'ü', 'v', 'y', 'z');
setlocale(LC_ALL, "tr_TR");
sort($alfabe, SORT_LOCALE_STRING);
print_r($alfabe);
/* Çıktısı
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
[7] => h
[8] => i
[9] => j
[10] => k
[11] => l
[12] => m
[13] => n
[14] => o
[15] => p
[16] => r
[17] => s
[18] => t
[19] => u
[20] => v
[21] => y
[22] => z
[23] => ç
[24] => ö
[25] => ü
[26] => ğ
[27] => ı
[28] => ş
)
*/
?>
function customSort($a, $b) {
static $charOrder = array('a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h', 'ı', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'ö', 'p', 'r', 's', 'ş','t', 'u', 'ü', 'v', 'y', 'z');
$a = mb_strtolower($a);
$b = mb_strtolower($b);
for($i=0;$i<mb_strlen($a) && $i<mb_strlen($b);$i++) {
$chA = mb_substr($a, $i, 1);
$chB = mb_substr($b, $i, 1);
$valA = array_search($chA, $charOrder);
$valB = array_search($chB, $charOrder);
if($valA == $valB) continue;
if($valA > $valB) return 1;
return -1;
}
if(mb_strlen($a) == mb_strlen($b)) return 0;
if(mb_strlen($a) > mb_strlen($b)) return -1;
return 1;
}
$array = array('ceyhan','şanlıurfa','özkan','ismail','adana');
usort($array, 'customSort');
print_r($array);
//ÇIKTI
//Array ( [0] => adana [1] => ceyhan [2] => ismail [3] => özkan [4] => şanlıurfa )