基于值的PHP排序数组


PHP Sorting Array Based on a Value

是的,我知道有很多这样的问题。我想根据这个数组中的"大小"键按降序重新排列我的数组。我一直在寻找合适的方法(array_multsort()、arsort()等),但还没有弄清楚如何得到我想要的。

Array ( [alCrn] => 27113 [epcid] => IMC601 [last_access] => 2015-03-14 15:26:40 [magnitude] => 1 ) 
Array ( [alCrn] => 27114 [epcid] => IMC602 [last_access] => 2015-03-16 20:45:17 [magnitude] => 8 ) 
Array ( [alCrn] => 27115 [epcid] => IMC603 [last_access] => 2015-03-15 17:57:58 [magnitude] => 2 ) 
Array ( [alCrn] => 27120 [epcid] => IMC608 [last_access] => 2015-03-15 23:56:16 [magnitude] => 12 ) 
Array ( [alCrn] => 27122 [epcid] => IMC612 [last_access] => 2015-03-15 19:55:02 [magnitude] => 2 ) 
Array ( [alCrn] => 27123 [epcid] => IMC615 [last_access] => 2015-03-17 14:00:34 [magnitude] => 6 )

问题是

这与数组的格式不正确有关。我必须获取MySQL查询的结果,并将它们全部放入一个数组中,如下所示:

$count = 0;
while($prefix_rows = $prefix_results->fetch_assoc()){
    //the results are not yet ordered according to the number of clicks...save each row in an array and sort using php in next step
    $prefix_rows_arr[$count]['alCrn'] = $prefix_rows['alCrn'];
    $prefix_rows_arr[$count]['epcid'] = $prefix_rows['epcid'];
    $prefix_rows_arr[$count]['last_access'] = $prefix_rows['last_access'];
    $prefix_rows_arr[$count]['magnitude'] = $prefix_rows['magnitude'];
    $count++;               
}

之后,我需要一个foreach循环来组织$prefix_rows_arr:

foreach($prefix_rows_arr as $row){
    $arr[] = $row;
}

最后usort()按预期工作

function compareMagnitudes($a, $b){
    if ($a['magnitude'] == $b['magnitude']) {
        return 0;
    }
    return ($a['magnitude'] > $b['magnitude']) ? -1 : 1;    
}
usort($arr, 'compareMagnitudes');

您可以定义一个comparaison函数,并将其作为第二个参数传递给usort函数,该函数按降序对数组进行排序。

function cmp($a, $b) {
    if ($a['key'] == $b['key']) {
        return 0;
    }
    return ($a['key'] < $b['key']) ? -1 : 1;
}
usort($your_array, "cmp");

将comparison函数中的key替换为适当的值,在您的情况下为magnitude