Сортировка массива по алфавиту в порядке северных стран/локали

#php #arrays #sorting #alphabet

Вопрос:

Извините, я изучаю PHP. Ищу помощь в сортировке массива по имени — но в качестве алфавита моей локали.

Я хотел бы отсортировать массив как nordic alpabet, и я хотел бы оставить строки с числами последними, я попытался использовать мультисорт с setlocale, но не смог выполнить правильную сортировку.

Мой пример массива:

 Array(
[3] => Array
(
    [0] => WP_Term Object(
        [name] = 3-title-with-starting-3
    )
)
[9] => Array
(
    [0] => WP_Term Object(
        [name] = 9-title-with-starting-9
    )
)   

[A] => Array
(
    [0] => WP_Term Object(
        [name] = A-title-with-starting-A
    )
    [1] => WP_Term Object(
        [name] = A-title-with-starting-A2
    )       
)
[Z] => Array
(
    [0] => WP_Term Object(
        [name] = Z-title-with-starting-Z
    )
    [1] => WP_Term Object(
        [name] = Z-title-with-starting-Z
    )       
)
[Ö] => Array
(
    [0] => WP_Term Object(
        [name] = Ö-title-with-starting-Ö
    )
    [1] => WP_Term Object(
        [name] = Ö-title-with-starting-Ö
    )       
))  
 

Ответ №1:

Вы можете использовать класс Collater в php. Вот пример. Я не лингвист, но думаю, что использование норвежского языка, вероятно, помогло бы.

 <?php
$letters = ['Ö', 'X', 'A', 'Z', '2', '99', 'D'];   
//Make a Collator object with the locale code of the language to sort.
$collator = new Collator('nb'); //nb    Norwegian Bokmål

//Use Collator::sort() instead of sort() [returns a numerical array];
//or Collator::asort() instead of asort [maintains the keys of an associative array].
$collator->sort($letters, Collator::SORT_REGULAR);
var_dump($letters);