Алфавитно отсортировать массив с доменами и доменами IDN

Итак, у меня есть массив с доменными именами

Array () {
    [0] => Array () {
        [id]=>int
        [name]=>string
        [something]=>string/int...
    }
    [38] => Array () {

    }
}

Мне нужно показать доменные имена в таблице, я упорядочиваю их по имени ASC из таблицы mysql, перебираю массив, а затем преобразую $domain['name'] для отображения IDN, отличных от xn--sfasdf-dfg .com, но удобочитаемый. Но эти доменные имена идут между W и Y, потому что они начинаются с X, я хочу отсортировать их по их юникодному имени някво-име.com (оно начинается с N) это доменное имя должно быть между M и O, а не между W и Y. Кто-нибудь знает, как это можно сделать? Искал в гугле, но вроде никто не писал о такой проблеме. Я пробовал функции usort и uasort php, но порядок был совершенно неправильным.

Спасибо, Яни Крыстев.


person Lanexbg    schedule 18.10.2013    source источник


Ответы (2)


Сортировка (или сопоставление для технического термина) — сложное дело уже внутри одного языка, но тем более, если вы смешиваете языки. Нет контекста, связанного со строкой доменного имени, вы не знаете, на каком языке она написана, у вас просто есть строка с символами (даже между всеми языками, использующими только ASCII, порядок сортировки не одинаков).

Поэтому вам сначала нужно разобраться и определить, на каком языке вы хотите работать. Затем у вас есть инструменты для сопоставления, но они не являются основным инструментом.

Например, в libc переменная LC_COLLATE будет влиять на все инструменты, правильно запрограммированные для интернационализации и, таким образом, учитывающие ее.

libicu — еще одна большая библиотека, которая обрабатывает подобные вещи, см. https://www-01.ibm.com/software/globalization/icu/

PHP имеет расширение intl, которое является оболочкой вокруг него. См., в частности, класс Collator по адресу http://php.net/manual/en/class.collator.php :

Обеспечивает возможность сравнения строк с поддержкой соответствующего порядка сортировки с учетом региональных настроек.

person Patrick Mevzek    schedule 10.02.2018

някво-име.com начинается не с "N", а с кириллической буквы "AN", которая звучит как английская "N". Если вы хотите отсортировать буквы по звучанию, у вас будут трудные времена. Если вы хотите отсортировать по букве, это другой алфавит, и он должен быть либо после Z, либо перед A.

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

person Sandman4    schedule 20.10.2013
comment
конвертировать английские домены в юникод? Что это обозначает? Как преобразовать example.com в юникод? - person Patrick Mevzek; 10.02.2018