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'];
});