【问题标题】:Sort multidimensional array with special characters in php在php中使用特殊字符对多维数组进行排序
【发布时间】:2017-03-28 13:27:34
【问题描述】:

我有一个多维数组,我按字母顺序排序,但问题是,使用丹麦特殊字符 æ ø å。它们应该按该顺序排序,但不按该顺序返回。

这是我的数组(部分被删除)

Array
(
    [0] => Array
        (
            [Name] => John
        )

    [1] => Array
        (
            [Name] => Pater
        )

    [2] => Array
        (
            [Name] => Allan

        )
    [3] => Array
        (
            [Name] => Ø test

        )
    [4] => Array
        (
            [Name] => Å test

        )
    [5] => Array
        (
            [Name] => Æ test

        )
)

我用这个函数来排序

uasort($sorted_region, function($a, $b) {
    $retval = $a['Name'] <=> $b['Name'];
    return $retval;
});

任何人都知道,如何排序,所以我得到 æ ø å 的正确顺序?

我见过一些使用例如

setlocale(LC_COLLATE, 'da_DK.utf8');
asort($array, SORT_LOCALE_STRING);

但我不确定如何在多维数组中实现这一点。

感谢您的帮助! :-)

【问题讨论】:

  • 是否安装了 DK 语言环境?
  • 这个字母,也会用英文字母排序吗?

标签: php arrays sorting multidimensional-array


【解决方案1】:

实际上这似乎有效

setlocale(LC_ALL, 'da_DK.utf8');

usort($sorted_region, function($a, $b) {
    return strcoll($a['Name'], $b['Name']);
});

【讨论】:

    【解决方案2】:

    查看this post

    使用此解决方案,由该页面上 cmets 中的 @Sbls 链接。它需要针对您的字符集进行修改,但它应该可以工作。

    function compareASCII($a, $b) {
      $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a);
      $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b);
      return strcmp($at, $bt);
    }
    uasort($lang, 'compareASCII');
    

    【讨论】:

    • 1) 我认为不适用于多维数组。 2)请不要复制/粘贴答案,而是标记重复。
    • 会的,抱歉。
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2016-09-13
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多