【问题标题】:Sorting multiarray on numeric field在数字字段上对多数组进行排序
【发布时间】:2021-10-18 14:59:04
【问题描述】:

我有一个如下所示的数组。我需要对 2 键上的每个数组进行排序。

    myarray [
     [2020] = [0 => 123, 1 => 234, 2 => 45],
     [2021] = [0 => 123, 1 => 34,  2 => 345],
     [2019] = [0 => 123, 1 => 134, 2 => 645]
    ]

所以结果是

     [2020] = 
      45
      123
      234
     [2021] = 
      34
      123
      345
     [2019] = 
      123
      134
      645]

我试过了

    array_multisort( array_column($myarray, $myarray[2]), SORT_ASC, $myarray );

    usort($myarray, array($myarray[2], 'sort_function'));

    function sort_function($a, $b)
    {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }

以上都不起作用。有人请指出我的错误或正确的方法吗?

下面是对问题的更好解释:

    myarray [
     [2020] = [0 => 123, 1 => 234, 2 => 357],
     [2020] = [0 => 123, 1 => 34,  2 => 157],
     [2020] = [0 => 123, 1 => 134, 2 => 257]
    ]

     [2020] = 
      157
      257         
      357

【问题讨论】:

  • sort_function 应该是usort 的第一个参数,而不是array() 的参数。
  • array_column 的第二个参数应该是 2,而不是 $myarray[2]。您已经在第一个参数中告诉它从哪个数组获取列。
  • 您的结果如何“按 2 键排序”?您正在对每个数组进行数字排序,而不是基于特定的键。
  • usort 手册显示数组是第一个参数。我不明白吗?我尝试将 myarray[2] 更改为 2 但它导致最终数组只是一个元素。该数组是一个值列表,其中 2 键保存所有值的总和。我现在看到我的示例结构不合理,并且已将其更改为仅显示一年的结果。对于造成的混乱,我深表歉意。
  • 抱歉,我弄反了。但是sort_function 应该是usort() 的参数,而不是array()

标签: php sorting multidimensional-array numeric


【解决方案1】:

对于第二个结果,使用:

$second_elements = array_column($myarray, 2);
sort($second_elements);

【讨论】:

  • 我的最后一条评论返回为已删除。我问这个问题是否违反了某些规则?
  • 您的评论没有被删除。他删除了他的答案,因为它不再对这个问题正确,所有相关的 cmets 都随之而来。
  • 哦,我明白了。在这一点上我完全糊涂了。主要是由于我错误地发布了问题。我会根据这里所说的继续尝试变化,如果我能找到一个解决方案,我会发布一个解决方案。我非常感谢所提供的帮助。
猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
相关资源
最近更新 更多