【问题标题】:How do I sort a multi-dimensional array by value?如何按值对多维数组进行排序?
【发布时间】:2011-03-17 22:43:17
【问题描述】:

我有一个如下数组,我想按键“attack”的值对该数组进行排序。数组(15, 13, 18) 的第一个键是数据库中某些特定项目的 ID,因此我不希望在对数组进行排序时更改这些键。任何帮助将不胜感激。

这是数组:

$data = array(
    '15' => array(
        'attack' => '45', 'defence' => '15', 'total' => '10'
    ),
    '13' => array(
        'attack' => '25', 'defence' => '15', 'total' => '10'
    ),
    '18' => array(
        'attack' => '35', 'defence' => '15', 'total' => '10'
    )
);

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    使用uasort():

    此函数使用用户定义的比较函数对数组进行排序,以使数组索引与其关联的数组元素保持相关性。

    这主要用于对实际元素顺序很重要的关联数组进行排序。

    例子:

    function cmp($a, $b) {
        if ($a['attack'] == $b['attack']) {
            return 0;
        }
        return ($a['attack'] < $b['attack']) ? -1 : 1;
    } 
    
    uasort($data, 'cmp');
    

    如果值总是字符串,你也可以在cmp()函数中使用strcmp()

    function cmp($a, $b) {
        return strcmp($a['attack'], $b['attack']);
    } 
    

    更新:

    要按降序排序,您只需更改返回值:

    return ($a['attack'] < $b['attack']) ? 1 : -1;
    //                                     ^----^
    

    或接受@salathe 的建议:

    return $b['attack'] - $a['attack'];
    

    【讨论】:

    • 对于过于复杂的回调的嘘声。 $a['attack'] - $b['attack']; 就足够了。
    • @salathe:没错,这样会更有效率。但这更符合文档的示例。
    • @Chris: uasort 对数组进行就地排序。它在成功时返回true(在我链接到的文档中提到)。如果要打印结果,则必须打印数组。
    • 当然,我使用 print_r 打印数组,但它只在屏幕上打印 1。
    • @Chris:不适合我。我得到了排序后的数组......一定是你的代码中的其他东西。
    【解决方案2】:

    只需使用array_multisort

    foreach ($data as $key => $row) {
        $attack[$key]  = $row['attack'];
    }
    
    // Sort the data with attack descending
    array_multisort($attack, SORT_DESC, $data);
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:
      $result = [];
      foreach ($data as $key => $value) {
          $result[$key] = $value;
          asort($result[$key]);
      }
      print_r($result);
      

      希望对你有帮助!!!

      【讨论】:

        猜你喜欢
        • 2021-07-11
        • 1970-01-01
        • 2012-06-15
        • 2013-04-03
        相关资源
        最近更新 更多