0

結果をマージしようとしている権限/グループベースの設定があります。たとえば、ユーザーは次の4つのグループに関連付けられている場合があります。

| 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     |

これらの4つの行(DBクエリから配列として格納されている)の結果を取得し、それらを1つの配列にマージすることを検討しています。これは次のようになります。

| 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

たぶん、これはすでに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')
于 2010-07-12T18:34:34.317 に答える
0

新しいマスターアレイを作成してから、子アレイをループして、次の場合にのみマスターを更新する必要があります。child['value'] > master['value']

于 2010-07-12T18:29:27.887 に答える
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 に答える