PHP - sort strings with accents

#   December 10, 2024, php

Let's have an array with some strings:

$data = [
    'Abcd',
    'Efgh',
    'Červený trpaslík',
    'Another one',
    'Špenát',
    'Železo',
    'Zelenina'
];

I need to sort that. When using asort($data);, the strings with accents are moved to the end of the array:

Abcd
Another one
Efgh
Zelenina
Červený trpaslík
Špenát
Železo

To be able to sort correctly with the accents, let's use the PHP Collator-family functions:

usort($tags,
    function($a,$b) {
        $coll = collator_create( 'cs_CZ' );
        $aSortKey = collator_get_sort_key($coll, $a);
        $bSortKey = collator_get_sort_key($coll, $b);
        return $aSortKey >= $bSortKey;
    }
);

Now the data is sorted correctly:

Abcd
Another one
Červený trpaslík
Efgh
Špenát
Zelenina
Železo