UCA + Natural Sorting

Недавно я узнал, что PHP уже поддерживает Алгоритм сортировки Unicode через расширение intl :

$array = array
(
    'al', 'be',
    'Alpha', 'Beta',
    'Álpha', 'Àlpha', 'Älpha',
    'かたかな',
    'img10.png', 'img12.png',
    'img1.png', 'img2.png',
);

if (extension_loaded('intl') === true)
{
    collator_asort(collator_create('root'), $array);
}

Array
(
    [0] => al
    [2] => Alpha
    [4] => Álpha
    [5] => Àlpha
    [6] => Älpha
    [1] => be
    [3] => Beta
    [11] => img1.png
    [9] => img10.png
    [8] => img12.png
    [10] => img2.png
    [7] => かたかな
)

Как видите, это работает отлично, даже со строками со смешанным регистром! Единственный недостаток, с которым я столкнулся до сих пор, заключается в том, что нет поддержки для естественная сортировка , и мне интересно, как лучше всего обойти это, чтобы я мог объединить лучшее из двух миров.

Я попытался указать Collator :: Флаг сортировки SORT_NUMERIC , но результат намного сложнее:

collator_asort(collator_create('root'), $array, Collator::SORT_NUMERIC);

Array
(
    [8] => img12.png
    [7] => かたかな
    [9] => img10.png
    [10] => img2.png
    [11] => img1.png
    [6] => Älpha
    [5] => Àlpha
    [1] => be
    [2] => Alpha
    [3] => Beta
    [4] => Álpha
    [0] => al
)

Однако, если я запускаю тот же тест только со значениями img * .png , я получаю идеальный результат:

Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

Может ли кто-нибудь придумать способ сохранить сортировку в Юникоде при добавлении возможностей естественной сортировки?

6
задан Alix Axel 20 February 2011 в 13:45
поделиться