Collection - magyar ábc szerinti rendezés
2019 Oct.

Sokszor előfordul, hogy különböző forrásokból összerakott eredményeket PHP oldalon rendezek, Collection-ök segítségével.

Ha pl a rendezési elv magyar ÁBC szerinti, alapból a sortBy() metódus nem jól rendezi, mert az ékezetes karakterrel kezdődő nevek a rendezett lista végén fognak szerepelni.

 

Megoldásként létrehoztam egy Collection Macro-t amit bárhol használhatunk a projectünkben.
Illeszd be az AppServiceProvider boot() metódusába a következő kódot:

Collection::macro('sortByHu', function($arg){

    setlocale(LC_COLLATE, 'hu_HU.utf8');

    return $this->sortBy($arg, SORT_LOCALE_STRING);

});

Használat pedig a következő:

$ordered = collect($data)->sortByHu('name');

Fontos, hogy a magyar locale telepítve legyen rendszerünkben. Ubuntu linux esetén meggyőződhetünk róla, mely nyelvek vannak telepítve:

$ locale -a

Ha nincs a rendszerünkben, akkor a következő parancsokkal telepíthetjük:

$ sudo locale-gen hu_HU

$ sudo locale-gen hu_HU.UTF-8

$ sudo update-locale