Как переопределить PHP 7.3 метод сортировки массива в C#? - PullRequest
0 голосов
/ 26 февраля 2020

Я сталкиваюсь со сторонней конечной точкой API, которая написана в PHP, работающем под PHP 7.3, который сортирует параметры запроса и вычисляет его сигнатуру SHA (кроме самого параметра сигнатуры), которые должны соответствовать один, который я предоставляю в параметрах запроса.

Вот пример кода PHP сортировки:

$sort_case_sensitive = true;
$keys = array_keys($parameters);
$keys_to_sort = array();
foreach ($keys as $key)
{
    $keys_to_sort[] = $sort_case_sensitive
                  ? $key
                  : strtoupper( $key );
}

array_multisort( $keys_to_sort, SORT_STRING, $keys );

Результат этой функции PHP выглядит примерно так:

address_street
address_street2
address_street_name
address_street_number

Однако мой клиент написан на C#, и сортированный вывод (алгоритм по умолчанию) выглядит следующим образом:

address_street
address_street_name
address_street_number
address_street2

Как переопределить алгоритм сортировки PHP в C#? Я не смог найти ссылку на алфавит, который используется PHP для сортировки. Я вижу вызовы zend_binary_strcasecmp_l для сортировки строк в исходном коде PHP, но не могу найти определение zend_binary_strcasecmp_l, только заголовки.

1 Ответ

2 голосов
/ 26 февраля 2020

Попробуйте использовать Порядковый компаратор:

var l = new List<string>();

l.Add("address_street_name");
l.Add("address_street_number");
l.Add("address_street");
l.Add("address_street2");

l.Sort(StringComparer.Ordinal);

foreach(string s in l) Console.WriteLine(s);

https://dotnetfiddle.net/GI7JnM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...