natsort и strnatcasecmp по-разному работают с кириллицей - PullRequest
0 голосов
/ 08 мая 2020

strnatcasecmp очень странно работает с cyrilli c. См. Код:

//must be exact in this order
$s1 = 'Журнал 1';
$s2 = 'Каротаж';

$arr[] = $s1;
$arr[] = $s2;
natsort($arr);
//worked fine
var_dump($arr);

var_dump(strnatcasecmp($s1, $s2));
//returns 1 although must return -1!

Ответы [ 2 ]

1 голос
/ 08 мая 2020

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

Посмотрите также здесь - Отсортируйте массив со специальными символами в PHP, возможно, вы найдете что-то, что принесет вам какое-то решение.

0 голосов
/ 10 мая 2020

В конце концов, я решил проблему следующим образом:

function strnatcasecmp_cyr($s1, $s2)
{
    if ($s1 === $s2) {
        return 0;
    }
    $arr[] = $s1;
    $arr[] = $s2;
    natsort($arr);
    if (current($arr) === $s1) {
        return -1;
    } else {
        return 1;
    }
}

Довольно некрасиво, но это помогло. С нетерпением ждем лучшего решения.

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