W międzyczasie wpadłem na rozwiązanie "skryptowe", w razie, gdyby ktoś nie mógł zmienić konfiguracji.
Kod
<?php
$convtab_from_pl = array('ą'=>'a/', 'ć'=>'c/', 'ę'=>'e/', 'ł'=>'l/', 'ń'=>'n/', 'ó'=>'o/', 'ś'=>'s/', 'ź'=>'x/', 'ż'=>'z/', 'Ą'=>'A/', 'Ć'=>'C/', 'Ę'=>'E/', 'Ł'=>'L/', 'Ń'=>'N/', 'Ó'=>'O/', 'Ś'=>'S/', 'Ź'=>'X/', 'Ż'=>'Z/'); // byc moze trzeba bedzie zamienić 'ż' na 'ź' i 'Ż' na 'Ź'
$convtab_to_pl = array ();
foreach ($convtab_from_pl as $k => $v)
{
$convtab_to_pl[$v] = $k;
}
function code_from_pl ($arg)
{
global $convtab_from_pl;
$arg = preg_replace ('/([acelnosACELNOS])/','1 ',preg_replace ('/Z/','X ',preg_replace ('/z/','x ',$arg)));
$arg = strtr($arg,$convtab_from_pl);
return $arg;
}
function code_to_pl ($arg)
{
global $convtab_to_pl;
$arg = preg_replace ('/([acelnosACELNOS])s/','1',preg_replace ('/Xs/','Z',preg_replace ('/xs/','z',$arg)));
$arg = strtr($arg,$convtab_to_pl);
return $arg;
}
$tekst = array('Łódź', 'Zażółć gęślą jaźń', 'Górsk', 'Łódzki Pcim', 'Lubicz', 'Goszcz', 'Zakopane', 'Grzeszne Myśli'); // przykładowa tablica danych.
$n = count($tekst);
echo ('Nie posortowane:<br>');
for ($i = 0; $i < $n; $i++)
{
echo ('<b>'.$i.':</b> '.$tekst[$i].'<br>');
}
$temp = $tekst;
echo('<br>Posortowane "na prymitywa" (według zasady "<b>z</b>" < "<b>ć</b>"...):<br>');
sort ($temp);
for ($i = 0; $i < $n; $i++)
{
echo ('<b>'.$i.':</b> '.$temp[$i].'<br>');
}
echo('<br>Zakodowane:<br>');
// gwóźdź programu - tak zakodowane dane wstawiamy do bazy. w bazie sortujemy najzwyklej w świecie: ORDER BY.
for ($i = 0; $i < $n; $i++)
{
$tekst[$i] = code_from_pl ($tekst[$i]);
echo ('<b>'.$i.':</b> '.$tekst[$i].'<br>');
}
sort ($tekst); // "symulacja";) ORDER BY
echo ('<br>Posortowane poprawnie:<br>');
for ($i = 0; $i < $n; $i++)
{
echo ('<b>'.$i.':</b> '.(code_to_pl($tekst[$i])).'<br>');
}
?>
W ostatniej chwili zauważyłem, że jest jakiś problem w kodowaniu polskich znaków na forum, więc zamieszczam to samo pod adresem
http://strony.wp.pl/wp/msulik/php.pl/116/sort.php.html