0

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

| 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,但它根据指定给函数的变量的顺序保留值。

4

3 回答 3

2

也许您希望数据库已经处理了这个:

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')
于 2010-07-12T18:34:34.317 回答
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];
    }
  }

当然,这可以写得更简单一些,你可以使用三元运算符来缩短它,但是这个冗长的显示显示了你可以如何更语义化地做到这一点。这是相对较快的,我使用它来帮助一次合并几百个帐户设置而不会出现问题。

于 2011-08-25T23:05:28.573 回答
0

您需要创建一个新的主阵列,然后遍历您的子阵列,并且仅在以下情况下更新主阵列child['value'] > master['value']

于 2010-07-12T18:29:27.887 回答