在php中使用特殊字符对多维数组进行排序

时间:2017-03-28 13:27:35

标签: php arrays sorting multidimensional-array

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

这是我的阵列(部分被删除)

ObjectMapper mapper = new ObjectMapper();

// For text string
JsonNode = mapper.readValue(mapper.writeValueAsString("Text-string"), JsonNode.class)

// For Array String
JsonNode = mapper.readValue("[\"Text-Array\"]"), JsonNode.class)

// For Json String 
String json = "{\"id\" : \"1\"}";
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getFactory();
JsonParser jsonParser = factory.createParser(json);
JsonNode node = mapper.readTree(jsonParser);

我正在使用此功能对其进行排序

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

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

感谢您的帮助! : - )

2 个答案:

答案 0 :(得分:2)

实际上这似乎有用

setlocale(LC_ALL, 'da_DK.utf8');

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

答案 1 :(得分:1)

结帐this post

使用此解决方案,由@Sbls在该页面的评论中链接。它需要为你的charset进行修改,但它应该可以工作。

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');