对多维数组进行排序会给出错误的第一项(以 P 开头,而不是 A)


Sorting multidimensional array gives a wrong first item (starting with a P, instead of an A)

使用以下

代码帮助我对多维数组进行排序

<?php
    $guildname = str_replace(" ", "_", "Mutiny");
    $url = 'http://eu.battle.net/api/wow/guild/frostmane/'.$guildname.'?fields=members';
    $content = file_get_contents($url);
    $json = json_decode($content, true);
    array_multisort($json["members"], SORT_ASC);
    foreach($json["members"] as $item) 
    {                           
        echo 
        "<tr>
            <td>" . $item['character']['name'] . "</td>
            <td>" . $item['character']['class'] . "</td>
            <td>" . $item['rank'] . "</td>
        </tr>"
        ;
    }
?>      

现在奇怪的是,我的数组排序正确,除了第一项。以检查此图像或下面的列表为例:

  • 彼得杀手
  • 阿尔巴特拉
  • 阿拉萨斯
  • 本塔
  • 饼干

添加SORT_STRING不起作用并给出错误。

<?php
$json = file_get_contents ('https://eu.api.battle.net/wow/guild/Frostmane/Mutiny?fields=members&locale=en_GB&apikey=*');
$data = json_decode ($json, true);
$entries = $data['members'];
usort ($entries, 'sortByName');
var_dump ($entries);
function sortByName ($entry1, $entry2)
{
        $name1 = $entry1['character']['name'];
        $name2 = $entry2['character']['name'];
        return ord ($name1) - ord ($name2);
}
?>
你可以

像这样使用array_multisort()

$array = array
(
[Baritone Horn] => Array
    (
        [0] => Array
            (
                [Name] => Baritone Maintenance
                [Order] => 12
                [CategoryID] => 13849839018
            )
        [1] => Array
            (
                [Name] => Baritone Mouthpieces
                [Order] => 13
                [CategoryID] => 13850963018
            )
        [2] => Array
            (
                [Name] => Accessories
                [Order] => 11
                [CategoryID] => 13850964018
            )
    ) 
[Alpen Horn] => Array
    (
        [0] => Array
            (
                [Name] => Baritone Maintenance
                [Order] => 12
                [CategoryID] => 13849839018
            )
        [1] => Array
            (
                [Name] => Baritone Mouthpieces
                [Order] => 13
                [CategoryID] => 13850963018
            )
        [2] => Array
            (
                [Name] => Accessories
                [Order] => 11
                [CategoryID] => 13850964018
            )
    ) 
)
array_multisort($array);