【问题标题】:Array Sorting on multiple elements对多个元素进行数组排序
【发布时间】:2016-04-11 08:25:34
【问题描述】:

我想我会重写它以使其更加清晰,并希望消除混乱。

可以说我有几层办公室。我想按每个楼层的最低编号对这些办公室进行排序 使结果如下所示:

-------------------------
| floor | office | sort |
-------------------------
|   1   |   4    |   1  |
|   2   |   4    |   2  |
|   3   |   3    |   3  |
|   4   |   3    |   4  |
|   1   |   5    |   5  |
|   2   |   5    |   6  |
|   3   |   4    |   7  |
|   4   |   4    |   8  |
|   1   |   6    |   9  |
|   2   |   6    |  10  |
|   3   |   5    |  11  |
|   4   |   5    |  12  |
|   2   |   7    |  13  |
|   3   |   6    |  14  |
|   4   |   6    |  15  |
|   3   |   7    |  16  |
|   4   |   7    |  17  |
-------------------------     

数组:

array ( 
0 => array ( 
            'floor' => 1, 
            'office' => 4, 
            ), 
1 => array ( 
            'floor' => 1, 
            'office' => 5, 
            ), 
2 => array ( 
            'floor' => 1, 
            'office' => 6, 
            ), 
3 => array ( 
            'floor' => 2, 
            'office' => 4, 
            ), 
4 => array ( 
            'floor' => 2, 
            'office' => 5, 
            ), 
5 => array ( 
            'floor' => 2, 
            'office' => 6, 
            ), 
6 => array ( 
            'floor' => 2, 
            'office' => 7, 
            ), 
7 => array ( 
            'floor' => 3, 
            'office' => 3, 
            ), 
8 => array ( 
            'floor' => 3, 
            'office' => 4, 
            ), 
9 => array ( 
            'floor' => 3, 
            'office' => 5, 
            ), 
10 => array ( 
            'floor' => 3, 
            'office' => 6, 
            ), 
11 => array ( 
            'floor' => 3, 
            'office' => 7, 
            ), 
12 => array ( 
            'floor' => 4, 
            'office' => 3, 
            ), 
13 => array ( 
            'floor' => 4, 
            'office' => 4, 
            ), 
14 => array ( 
            'floor' => 4, 
            'office' => 5, 
            ), 
15 => array ( 
            'floor' => 4, 
            'office' => 6, 
            ), 
16 => array ( 
            'floor' => 4, 
            'office' => 7, 
            )
, )

我需要做的是一次遍历每一层,然后选择编号最低的办公室,然后再次从编号最低的楼层开始,直到筋疲力尽。

【问题讨论】:

  • 你能发布一个print_r而不是你的数组的var_dump吗?否则很难测试。
  • 如果你想让测试变得容易,请使用 var_export()
  • 我在上面添加了一个导出。因为我已经包含了 var_dump。
  • usort 是答案,但对逻辑不了解,很难理解您所追求的排序逻辑
  • 我可以这样解释。在这个数组中,我们有 4 个热赛。这些代表没有直接转移到主赛事的车手。他们需要根据他们的完成位置和热火时间分配到半决赛。因此,快速热火中的第一个骑手 = 1,第二个快速热火中的第一个骑手 = 2,依此类推。当我们已经完成了第一个骑手的所有预赛时,我们在每个预赛中移动到下一个骑手......直到所有人都被分配了一个号码。这将为我提供半决赛的阵容。确实很复杂,但我们就是这样做的。

标签: php arrays loops sorting indexing


【解决方案1】:

您可能想要的是usort 函数。类似的东西

function racerCompare($a, $b) {
    if ($a['heat_nbr'] > $b['heat_nbr'}) {
        return -1;
    } else if ($a['heat_nbr'] < $b['heat_nbr'}) {
        return 1;
    } else {
        return 0;
    }
}
usort($startingArray, 'racerCompare');

racerCompare 的逻辑可能有点不同(问题并不完全清楚)。

【讨论】:

  • 我知道你在做什么,但它肯定没有返回正确的顺序。
  • 比赛顺序来自热火比赛时间。我在这里仅显示比赛时间以供参考。您需要知道的只是race_order和heat_finish。这些是此类需要考虑的唯一字段。每个race_order 取第一个heat_finish,移动到下一个.. 循环,直到用尽为止。
  • 我在上面发布了您提供的功能的结果。没有按需要排序。
  • 我已经尝试了该函数中我能想到的所有组合进行测试,这已经尽可能接近了。我将 if 更改为 (if ($a['heat_finish'] $b['race_order']))
猜你喜欢
  • 2017-08-25
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2015-06-28
  • 2017-12-16
  • 1970-01-01
相关资源
最近更新 更多