PHP array_multisort - выполняет ли SORT_LOCALE_STRING свою работу? - PullRequest
0 голосов
/ 13 апреля 2020

PHP 7.4 - Apache 2.4 - Windows 2012r2

О setlocale

Много ответов о UTF-8 использует такие обозначения:

setlocale(LC_TIME, 'cs_CZ.utf8', 'czech');

Я не могу прикрепить строку «.utf8» в любой форме, а также подчеркивание не работает для меня. Можно использовать только дефис. Как 'da-DK'

Кто-нибудь может уточнить?

О массиве-мультисортировке

<?php
echo 'Saturday: Lørdag<br>';
setlocale(LC_ALL,'da-DK');
echo setlocale(LC_ALL, 0) . '
'; echo utf8_encode(strftime("%A %d %B %Y", mktime(0, 0, 0, 10, 24, 2020))) . '
'; echo strftime("%A %d %B %Y", mktime(0, 0, 0, 10, 24, 2020)) . '
'; $a=array('Aa','By','Æd','Øv','Ål','€e','Łó','$d'); collator_asort(collator_create('da'), $a); echo "";echo "Correct danish sort A: ";print_r($a);echo "
"; $ a = массив ('Aa', 'By', 'Æd', ' Øv ',' Ål ',' € e ',' Łó ',' $ d '); $ b = array (' Ha ',' Ho ',' Hi ',' Yo ',' No ',' Do ' , 'Re', 'Mi'); array_multisort ($ a, SORT_DES C, SORT_LOCALE_STRING, $ b); echo '
A:'; array_map (function ($ e) {echo $ e, '-' ;}, $ a); echo '
B:'; array_map (function ($ e) {echo $ e, '-';}, $ b);

Вывод:

Saturday: Lørdag
da-DK
lørdag 24 oktober 2020
l�rdag 24 oktober 2020
Correct danish sort A: Array
(
    [7] => $d
    [5] => €e
    [1] => By
    [6] => Łó
    [2] => Æd
    [3] => Øv
    [0] => Aa
    [4] => Ål
)
A:Łó - Aa - By - Æd - Ål - €e - Øv - $d -
B:Re - Ha - Ho - Hi - No - Do - Yo - Mi - 

«Двойной Аа» - это еще один способ сказать «Å» в дани sh. Если это не ошибка, то «Аа» является вторым последним в правильной сортировке : -)

Что нужно сделать, чтобы заставить array_multisort работать должным образом - или, по крайней мере, обновить руководство PHP.

Мой временный обходной путь

https://github.com/ThorkilG12/HTML-and-PHP/tree/master/Sort%20PHP%20arrays%20with%20UTF-8%20according%20to%20Locale

...