【问题标题】:Sorting a multidimensional array in PHP by a numeric value在 PHP 中按数值对多维数组进行排序
【发布时间】:2013-06-28 03:53:55
【问题描述】:

我已经被这个问题困扰了几天了。我似乎无法理解似乎应该是一个简单的问题。

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

[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 附带的许多不同的排序功能尝试了多种不同的解决方案,但没有成功。

我见过这个问题的变体,但他们的答案总是不同。在尝试实施我看到的一些解决方案但失败后,我希望你们中的一些人可以提供帮助。

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:

正如 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、0 或 1。它可以是小于、等于或大于零的任何数字 - 确切的值无关紧要。
【解决方案2】:

usort() 的简单修复:

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

PHP 手动示例按照$a, $b 的顺序进行比较以给出升序结果。此建议比较 $b,$a 以反转排序顺序。

这是 PHP 参考:usort()

【讨论】:

    【解决方案3】:

    使用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

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多