Учитывая следующий массив:
$foo = ["a", "B", "æ", "Æ", "c", "A", "b", "C", "1"];
Затем я устанавливаю локаль с помощью setlocale(LC_ALL, ['nb_NO.UTF-8', 'no_NO.UTF-8']);
и запускаю массив через sort($foo, SORT_LOCALE_STRING)
.
В Ubuntu отсортированный массив будет выглядеть так:
[
0 => '1',
1 => 'A',
2 => 'a',
3 => 'B',
4 => 'b',
5 => 'C',
6 => 'c',
7 => 'Æ',
8 => 'æ',
]
В то время как на Mac (OS X) я получаю:
[
0 => '1',
1 => 'A',
2 => 'B',
3 => 'C',
4 => 'a',
5 => 'b',
6 => 'c',
7 => 'Æ',
8 => 'æ',
]
Кажется, OS X хочет отсортировать строки, начинающиеся с заглавных букв, по отдельности (ABC
, затем abc
), в то время как я просто хотел бы, чтобы они были вместе (AaBbCc
).
Есть ли способ заставить их сортировать массивы таким же образом в PHP, или мне нужно написать собственный метод сортировки, используя вместо этого один из методов u*sort()
?
Редактировать: похоже, очень похоже на вопрос, который помечен как дубликат . Хотя OS X все еще, кажется, сортирует прописные и строчные буквы друг за другом вместо того, чтобы смешивать их, это можно исправить, добавив strtolower()
к функции сортировки.