按自定义顺序按键对数组进行排序

Sim*_*ian 5 php arrays sorting

我有以下多维数组

[
    'June 2015' => [
        'LOW' => [160.50],
        'MEDIUM' => [0.00],
        'HIGH' => [60.80]
    ],
    'July 2015' => [
        'MEDIUM' => [226.00],
        'HIGH' => [263.00],
        'LOW' => [121.96]
    ]
]
Run Code Online (Sandbox Code Playgroud)

我需要按每个内部数组的键对它们进行排序,以便它们按低、中、高的顺序排列(第一个偶然是正确的)。

我尝试了从这里获取并调整的以下代码:

function cmp($a, $b){
        $a = preg_replace('@^(LOW|MEDIUM|HIGH) @', '', $a);
        $b = preg_replace('@^(LOW|MEDIUM|HIGH) @', '', $b);
        return strcasecmp($a, $b);
    }

    foreach($live_quotations as $exp_conversion_date => $Aconversion_likelihood){
        foreach($Aconversion_likelihood as $conversion_likelihood => $quotation_values){
    
            uksort($live_quotations[$exp_conversion_date], "cmp");
    
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这将它们排序为高、中、低(按字母顺序升序)。如果我更改 cmp 函数中的顺序并不重要,它们总是以这种方式排序。我认为我没有正确理解这个 uksort 或 cmp 函数。

Phy*_*sis 5

您可以使用以下比较函数:

function cmp($a, $b) {
    $order = Array( 'LOW' => 0, 'MEDIUM' => 1, 'HIGH' => 2 );
    return $order[$a] - $order[$b];
}
Run Code Online (Sandbox Code Playgroud)

该代码的示例在这里