2010-07-12 6 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  | 

Наибольшее значение из каждого массива становится значение в объединенном массиве. Если 1 из 100 записей - «2», а остальные «1» или «0», тогда мне нужно «2», чтобы быть в результате.

Я просмотрел массив_merge, но он сохраняет значение в зависимости от порядка переменных, указанных в функции.

ответ

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

Это сработало отлично и очень просто. Благодаря! – kagaku

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

конечно, это можно записать немного более просто, и вы можете использовать тройной оператор, чтобы сократить его, но этот подробный показ показывает, как вы можете сделать это более семантически. Это относительно быстро, и я использую его, чтобы помочь объединить несколько сотен настроек учетной записи одновременно без проблем.

Смежные вопросы