Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] sort() a polskie znaki
Forum PHP.pl > Forum > Przedszkole
SmokAnalog
Witajcie,

nie odnalazłem działającego rozwiązania problemu sortowania polskich znaków z sort.

  1. setlocale(LC_COLLATE, 'pl_PL');
  2. $test = array('mucha', 'ćma', 'osa');
  3. sort($test);
  4. print_r($test);


Wypluwa:
Kod
Array ( [0] => mucha [1] => osa [2] => ć‡ma )


Próbowałem też dodać inne nazwy paczek: "Polish", "pl_PL.UTF-8" itd. - nic nie działa.

Czy jest jakaś wbudowana działająca metoda? Testowałem na lokalnym serwerze (OSX) i na zewnętrznym (home.pl).
Gość
http://us2.php.net/manual/en/function.natcasesort.php#101394

tutaj rozwiązanie dla Niemieckiego. Podmień na Polskie i powinno być git.
SmokAnalog
Oczywiście, można pisać własne funkcje sortujące, ale pytanie brzmi czy można to załatwić z setlocale, które teoretycznie do tego właśnie służy. Tyle, że... nie działa smile.gif
Gość
Rozumiem, nie doczytałem. Zatem :
http://us3.php.net/sort

A dokładniej :

Cytat
SORT_LOCALE_STRING - compare items as strings, based on the current locale. It uses the locale, which can be changed using setlocale()

Czyli,
sort($var, SORT_NATURAL | SORT_LOCALE_STRING );
SmokAnalog
Próbowałem wcześniej kombinować z tymi flagami i nic nie działa.
!*!
Przecież działa setlocale i SORT_LOCALE_STRING.
SmokAnalog
U kogo działa, u tego działa tongue.gif
!*!
Pokaż kod.
SmokAnalog
  1. setlocale(LC_COLLATE, 'pl_PL', 'pl_PL.UTF-8', 'Polish', 'polish', 'pl', 'PL');
  2. $test = array('mucha', 'ćma', 'osa');
  3. sort($test, SORT_LOCALE_STRING);
  4. print_r($test);


Na home.pl już mi działa, chyba miałem tam plik ze złym kodowaniem, bo tylko edytowałem źródło. Na localhoście nie działa, pewnie brakuje paczki do obsługi języka polskiego.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.