使用数值对PHP中的多维数组进行排序

时间:2013-06-28 03:53:56

标签: php sorting multidimensional-array

我已经坚持这个问题了几天了。我似乎无法绕过看似简单的问题。

这是阵列,我想按温度对其进行排序。降序。

[0] => Array
    (
        [name] => Sandnes
        [latitude] => 58.85244
        [longitude] => 5.73521
        [temperature] => 12.0
    )

[1] => Array
    (
        [name] => Sola
        [latitude] => 58.88854
        [longitude] => 5.65285
        [temperature] => 12.3
    )

[2] => Array
    (
        [name] => Kleppe
        [latitude] => 58.77303
        [longitude] => 5.63329
        [temperature] => 12.1
    )

[3] => Array
    (
        [name] => Hommersåk
        [latitude] => 58.93167
        [longitude] => 5.85111
        [temperature] => 11.3
    )

[4] => Array
    (
        [name] => Ålgård
        [latitude] => 58.76417
        [longitude] => 5.85253
        [temperature] => 10.9
    )

[5] => Array
    (
        [name] => Stavanger
        [latitude] => 58.97005
        [longitude] => 5.73332
        [temperature] => 11.9
    )

[6] => Array
    (
        [name] => Tananger
        [latitude] => 58.93618
        [longitude] => 5.5741
        [temperature] => 12.5
    )

[7] => Array
    (
        [name] => Bryne
        [latitude] => 58.73536
        [longitude] => 5.64766
        [temperature] => 12.4
    )

我已经尝试了多种不同的解决方案,其中包含PHP提供的许多不同的排序功能,但没有运气。

我见过这个问题的变体,但他们的答案总是不同的。在尝试实施我见过的一些解决方案后,我希望你们中的一些人可能会有所帮助。

3 个答案:

答案 0 :(得分:2)

正如ukratic首先提出的那样,这很有效。

function compare_temp($a,$b)
{
    if($a['temperature'] == $b['temperature']) return 0;
    return ($a['temperature'] < $b['temperature']) ? 1 : -1;
}
usort($places, 'compare_temp');

答案 1 :(得分:2)

使用usort()进行轻松修复:

usort($arr, function ($a, $b){
  return ($b["temperature"]-$a["temperature"]);
});

PHP手册示例按$a, $b的顺序进行比较,以提供升序结果。此建议比较$b,$a以反转排序顺序。

以下是PHP参考:usort()

答案 2 :(得分:0)

使用array_multisort

试试这个希望它可以帮助你

$array = $your_array

foreach ($array as $key => $row) {
    $temperature[$key] = $row['temperature'];
 }
 array_multisort($temperature, SORT_DESC, $array);
 echo "<pre>";
 print_r($array);
 echo "</pre>";

看到这个小CODEPAD DEMO