Inchoo / php-academy

Materials for PHP Academy, Osijek, October 2016
20 stars 3 forks source link

Kako sortirati polje stringova, koji sadrže hrvatska slova? #1

Open htonkovac opened 8 years ago

htonkovac commented 8 years ago

PHP-ova funkcija sort() sve "non-ascii" znakove stavlja na kraj.

ivanweiler commented 8 years ago

Pozdrav, treba prouciti:

http://php.net/manual/en/function.setlocale.php http://php.net/manual/en/function.sort.php http://php.net/manual/en/function.strcoll.php

Ovako nekako ide na Linuxu (live serverima):

$arrayToSort = [
    'Čokadinci',
    'Šibenik',
    'Bilje',
    'Zagreb'
];

setlocale(LC_COLLATE, 'hr_HR.utf8');
sort($arrayToSort, SORT_LOCALE_STRING);

echo '<pre>';
var_dump($arrayToSort);

// usort($arrayToSort, 'strcoll');  //metoda 2

Na Linuxu se dotupni locale-i mogu naci sa $ locale -a konzolskom naredbom.

Iskreno, ne znam iz glave koji locale treba staviti na Windowsima jer nije isto, isprobam malo kasnije, nemam sad win masinu. Ako netko skonta neka pliz napise ovdje :)

Vidim da manual navodi:

On Windows, setlocale(LC_ALL, '') sets the locale names from the system's regional/language settings (accessible via Control Panel).

Naravno, moguce je i napraviti custom sorting za hr sa usort-om i slicnima, pa se mozete igrati i s tim.

Pozz, Ivan

ivanweiler commented 8 years ago

Oke, nakon malo proucavanja i testiranja, cini mi se da je ovo bolja i modernija varijanta: http://php.net/manual/en/collator.sort.php

$arrayToSort = [
    'Čokadinci',
    'Šibenik',
    'Bilje',
    'Zagreb'
];

$collator = collator_create('hr_HR');
collator_sort($collator, $arrayToSort);
var_export($arrayToSort);

Da bi ovo radilo, potrebno je da je u php-u upaljena intl ekstenzija koja sluzi za razne locale/jezicne manipulacije. intl je danas standard i skoro svi serveri ga imaju, ali zna biti da po defaultu nije upaljen u wampu/xamppu i slicnima.

Ako je ugasen, pali se tako da editirate php.ini (glavni php konfig fajl), odkomentirate liniju ;extension=php_intl.dll i restartate server. phpinfo() vam moze pokazati gdje vam se nalazi ucitani php.ini na windowsima.

http://stackoverflow.com/questions/33869521/how-can-i-enable-php-extension-intl

htonkovac commented 8 years ago

Hvala, ovo radi !