合并两个(或更多)数组并保持最高的值?

时间:2010-07-12 18:27:25

标签: php oracle permissions usergroups

我有一个基于权限/组的设置,我正在尝试合并结果。例如,用户可能与四个组相关联:

| username  | passwd | email         | groups         |
| test_user | 9agb9  | test@test.com | g1, g2, g3, g4 |

分组表:

| group | perm1 | perm2 | perm3 | perm4 | perm5 | perm5 | perm7 |
| g1    | 1     | 0     | 0     | 0     | 1     | 0     | 2     |
| g2    | 0     | 0     | 0     | 1     | 0     | 0     | 0     |
| g3    | 0     | 1     | 0     | 0     | 2     | 0     | 0     |
| g4    | 0     | 0     | 0     | 0     | 1     | 1     | 0     |

我希望获取这四行的结果(从数据库查询存储为数组)并将它们合并为一个数组,如下所示:

| group    | perm1 | perm2 | perm3 | perm4 | perm5 | perm5 | perm7 |
| combined | 1     | 1     | 0     | 1     | 2     | 1     | 2     |

每个数组的最高值成为组合数组中的值。如果100条记录中有1条为“2”,其余为“1”或“0”,则我需要“2”才能显示结果。

我查看了array_merge,但它保留了值,具体取决于为函数指定的变量的顺序。

3 个答案:

答案 0 :(得分:2)

也许您希望DB已经处理过这个问题:

SELECT MAX(perm1), MAX(perm2), MAX(perm3), MAX(perm4), MAX(perm5), MAX(perm6), MAX(perm7)
FROM group_perm_linking_table
WHERE group IN ('gr1', 'gr2', 'gr3', 'gr4')

答案 1 :(得分:0)

您需要创建一个新的主数组,然后循环遍历子数组,并仅在child['value'] > master['value']

时更新主数据

答案 2 :(得分:0)

最近在PHP中做了类似的事情:

  $new_array = array();
  foreach ($array_second as $key => $value) {
    if ($array_first[$key] > $array_second[$key]) {
      $new_array[$key] = $array_first[$key];
    }
    else {
      $new_array[$key] = $array_second[$key];
    }
  }

当然,这可以更简单地编写,你可以使用三元运算符来缩短它,但是这个详细的显示显示了你如何在语义上做得更多。这是相对较快的,我正在使用它来帮助一次合并几百个帐户设置而没有问题。