0

strnatcasecmp 与西里尔字母的配合非常奇怪。见代码:

//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!
4

2 回答 2

1

是的,可能是问题,因为这个函数是二进制不安全的。你可以试试strncasecmp吗?

也看看这里 -在 PHP 中使用特殊字符对数组进行排序,也许你会发现一些能给你带来解决方案的东西。

于 2020-05-08T14:54:04.307 回答
0

最终,我解决了这样的问题:

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;
    }
}

相当丑陋,但它成功了。期待更好的解决方案。

于 2020-05-10T10:42:32.447 回答