数字重新映射以更改用户顺序会导致看似随机排序

时间:2014-09-29 06:02:02

标签: php arrays usort

我尝试按类类别排序一系列玩家角色(在游戏中)。每个玩家的等级用数字表示。我希望这些类按字母顺序排列,而不是根据我的数据如何定义每个类的数字排列。

我的代码是:

$AlphabeticalClass = array(
    1 => 11,
    2 => 6,
    3 => 3, 
    4 => 8,
    5 => 7,
    6 => 1,
    7 => 9,
    8 => 4,
    9 => 10,
    10 => 5,
    11 => 2,
);

function CharacterSort($Char1, $Char2)
{
    $c1 = $Char1['character']['class'];
    $c2 = $Char2['character']['class'];

    //$c1 = $AlphabeticalClass[$c1];
    //$c2 = $AlphabeticalClass[$c2];

    return strcmp($c1, $c2);
}

当评论出现时,排序完全发生(尽管以我不想要的方式排序类):

Sorting working

删除注释后,重新映射类重新值按字母顺序排列:

Sorting not working

如上所示,类排序已被抛出窗口。关于造成这种情况的原因有什么想法吗?

usort应用于组织数据的数组,如下所示:

Array of data

1 个答案:

答案 0 :(得分:0)

如果类是数字,您可能希望使用-而不是strcmp()

function CharacterSort($Char1, $Char2) {
    $c1 = $Char1['character']['class'];
    $c2 = $Char2['character']['class'];

    return $c1 -$c2;
}

Demo