php Проблема сортировки масива по Укр алфавиту

Есть масив, сортирую по алфавиту,русский сортируется правильно а вот украинский почти правильно,кроме буквы "І" она ставится на первое место в сортировке.Как отсортировать масив по Укр алфавиту?

  public function findCountries()
{
    $countries = Country::whereHas('store')->withTranslation()->get();
    $all_country = [];
    foreach ($countries as $county) {
        $all_country[] =
            [
                'id' => $county->id,
                'code' => $county->code,
                'name' => $county->name,
            ];
    }
    function build_sorter($key)
    {
        return function ($a, $b) use ($key) {
            return strnatcmp($a[$key], $b[$key]);
        };
    }

    usort($all_country, build_sorter('name'));
    
    return response()->json(['countries' => $all_country]);
}

Вот так выглядит готовый список,видно что страна с названием которое начинается на букву I на первом местеА вот дамп масива


Ответы (2 шт):

Автор решения: Alexander Sanik

Сам столкнулся с этой проблемой. Рекомендую использовать Collator:

usort($array, function($item_1, $item_2) {
    $collator = collator_create('uk_UA');
    $arr = array($item_1['name'], $item_2['name']);
    collator_asort($collator, $arr, Collator::SORT_STRING);

    return array_pop($arr) == $item_1['name'];
});
→ Ссылка
Автор решения: mash

Нужно делать через collator (create, asort)

→ Ссылка