Usort,无需替换密钥PHP

mic*_*nes 0 php arrays usort

我遇到了主要的usort()问题!:(因此,基本上我想按它们的值对数组进行排序。我希望这些值以以下顺序显示:白金,黄金,白银,青铜,完整,无,不完整。现在我可以很好地对其进行排序,但是我想保留其密钥(可能吗?),这是我的代码:

function compareMedals( $a, $b ) {
    $aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete');
    $aValues = array( 1, 2, 3, 4, 5, 6, 7);
    $a = str_ireplace($aMap, $aValues, $a);
    $b = str_ireplace($aMap, $aValues, $b);
    return $a - $b;
}
usort($list, 'compareMedals');
Run Code Online (Sandbox Code Playgroud)

那么可以在保留密钥的同时对它们进行排序吗?谢谢!:)

编辑

数组:

$array = array("post1" => 'Platinum', "Post2" => "Bronze, "Post3" = > Gold)
Run Code Online (Sandbox Code Playgroud)

应该输出:

"Post1" => 'Platinum',
"Post3" => 'Gold',
"Post2" => 'Bronze'
Run Code Online (Sandbox Code Playgroud)

但是它输出的是:

"0" => 'Platinum',
"1" => 'Gold',
"2" => 'Bronze'
Run Code Online (Sandbox Code Playgroud)

Ser*_*ron 6

只需使用uasortintead即可usortuasortis的定义

使用用户定义的比较函数对数组进行排序并维护索引关联。

有一个带有比较功能和uasort的代码示例:

$list = array('post1' => 'Gold', 'post2' => 'None', 'post3' => 'Platinum');

function compareMedals( $a, $b ) {
    $aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete');
    $aValues = array( 1, 2, 3, 4, 5, 6, 7);
    $a = str_ireplace($aMap, $aValues, $a);
    $b = str_ireplace($aMap, $aValues, $b);
    return $a - $b;
}
uasort($list, 'compareMedals');

print_r($list);
Run Code Online (Sandbox Code Playgroud)

该代码给出了结果

Array
(
    [post3] => Platinum
    [post1] => Gold
    [post2] => None
)
Run Code Online (Sandbox Code Playgroud)