2010-07-12 130 views
0

我有一个基于权限/组的设置,我试图合并结果。例如,用户可能具有四个组相关联:合并两个(或更多)数组并保持最高值?

| username | passwd | email   | groups   | 
| test_user | 9agb9 | [email protected] | 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  | 

我想找采取这些四行的结果(存储为从DB查询的阵列)并将它们合并到一个阵列中,如下所示:

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

每个阵列的最大值将成为组合阵列中的值。如果100条记录中有1条是“2”,其余的是“1”或“0”,那么我需要“2”才能得到结果。

我看了array_merge,但它保持值取决于指定给该函数的变量的顺序。

回答

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') 
+0

这工作完美,非常简单。谢谢! – kagaku 2010-07-12 18:38:58

0

你需要做一个新的主数组,然后遍历你的孩子阵列和只更新主时child['value'] > master['value']

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]; 
    } 
    } 

当然,这可以多一点简单的写的,你可以使用一个三元运算符缩短,但这个详细的显示显示了你如何能更加语义地完成它。这是相对较快的,我正在使用它来帮助合并几百个帐户设置,而不会出现问题。