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