将数组按字母顺序排序为北欧/语言环境顺序

问题描述

对不起 - 我正在学习 PHP。寻求帮助按名称对数组进行排序 - 但作为我的语言环境字母表。

我想将数组排序为北欧字母表,我想最后留下带有数字的行,我尝试使用 setlocale 进行多重排序,但我无法正确排序。

我的示例数组:

Array(
[3] => Array
(
    [0] => WP_Term Object(
        [name] = 3-title-with-starting-3
    )
)
[9] => Array
(
    [0] => WP_Term Object(
        [name] = 9-title-with-starting-9
    )
)   

[A] => Array
(
    [0] => WP_Term Object(
        [name] = A-title-with-starting-A
    )
    [1] => WP_Term Object(
        [name] = A-title-with-starting-A2
    )       
)
[Z] => Array
(
    [0] => WP_Term Object(
        [name] = Z-title-with-starting-Z
    )
    [1] => WP_Term Object(
        [name] = Z-title-with-starting-Z
    )       
)
[Ö] => Array
(
    [0] => WP_Term Object(
        [name] = Ö-title-with-starting-Ö
    )
    [1] => WP_Term Object(
        [name] = Ö-title-with-starting-Ö
    )       
))  

解决方法

您可以使用 php 中的 Collater 类。这是一个例子。我不是语言学家,但我认为使用挪威语语言环境可能会有所帮助。

<?php
$letters = ['Ö','X','A','Z','2','99','D'];   
//Make a Collator object with the locale code of the language to sort.
$collator = new Collator('nb'); //nb    Norwegian Bokmål

//Use Collator::sort() instead of sort() [returns a numerical array];
//or Collator::asort() instead of asort [maintains the keys of an associative array].
$collator->sort($letters,Collator::SORT_REGULAR);
var_dump($letters);