2010-07-12 127 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]; 
    } 
    } 

當然,這可以多一點簡單的寫的,你可以使用一個三元運算符縮短,但這個詳細的顯示顯示了你如何能更加語義地完成它。這是相對較快的,我正在使用它來幫助合併幾百個帳戶設置,而不會出現問題。

相關問題