2014-10-21 2 views
0

Я работаю над этой проблемой уже пару дней. Я хотел бы создать массив, содержащий список идентификаторов пользователя с суммой value1 и value2 из списка данных ниже.Группировка и добавление значений многомерных массивов PHP

User ID value1 Value2 
1  21  2 
2  2  6 
3  4  43 
1  3  9 
2  17  8 
1  12  28 

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

$members_list = array(); 
if(!in_array($user_id, $members_list)){ 
    array_push($members_list, $user_id); 
} 
foreach($data_table as $data_row){ 
    if($user_id == $data_row['$user_id']) { 
     $members_list[$_user_id]['total'] = $members_list[$user_id]['total'] + $data_row['value1'] + $data_row['value2']; 
    } 
} 

Я пытаюсь научить себя, как программировать и, вероятно, не хватает фундаментального понимания того, как организовать и перебрать многомерных массивов. Надеюсь, кто-то поможет мне разобраться. Заранее спасибо.

+0

Не могли бы вы вывести результат var_dump ($ data_table) '? – Dinistro

ответ

0

Я думаю, что я бы написать:

$members_list = array(); 
foreach($data_table as $data_row){ 
    if(isset($members_list[$data_row['$user_id']]) == false) { 
    $members_list[$user_id] = 0; 
    } 
    $members_list[$_user_id]['total'] += ($data_row['value1'] + $data_row['value2']); 
} 

Или вы строгания на добавлении дополнительной информации о каждом члене? в этом случае у вас может быть массив вместо числа для каждого члена.

в том случае, если вы используете

$members_list[$user_id] = array(); 
$members_list[$user_id]['total'] = 0; 

в, если заявление.

0

Ну, это будет фиктивная пример того, что я думаю, что вы ищете ...

Во-первых, вот ваш многомерный массив:

$users = array(
    array('user_id' => 1, 'value1' => 21, 'value2' => 2), 
    array('user_id' => 2, 'value1' => 2, 'value2' => 6), 
    array('user_id' => 3, 'value1' => 4, 'value2' => 43), 
    array('user_id' => 1, 'value1' => 3, 'value2' => 9), 
    array('user_id' => 2, 'value1' => 17, 'value2' => 8), 
    array('user_id' => 1, 'value1' => 12, 'value2' => 28) 
); 

Во-вторых, цикл через список пользователей, сгруппированных по user_id и добавив третий ключ (общее значение) для каждого пользователя:

$members_list = array(); 
foreach ($users as $user) 
{ 
    if (!array_key_exists($user['user_id'], $members_list)) 
     $members_list[$user['user_id']] = $user['value1'] + $user['value2']; 
    else 
     $members_list[$user['user_id']] += $user['value1'] + $user['value2']; 
} 
0

Таким образом, ваш массив должен выглядеть следующим образом:

$myArray = array("userId" => array("value1", "value2")); 

Так что я собираюсь использовать несколько значений из списка в качестве примера:

$users = array(
    1 => array(21, 2), 
    2 => array(2, 6), 
    3 => array(4,43) 
); 

Так что с этим массивом не стесняйтесь проверить его с этим:

foreach ($users as $user => $values) { 
    echo "<b>USER:".$user."</b> -> "; 
    $sum = 0; 
    foreach ($values as $value) { 
     echo $value.", "; 
     $sum = $sum + $value; 
    } 
    echo " Sum: ".$sum."<br>"; 
} 

You должен получить этот результат:

USER:1 -> 21, 2, Sum: 23 
USER:2 -> 2, 6, Sum: 8 
USER:3 -> 4, 43, Sum: 47 

Это вам поможет?

+0

Да. tyvm. Теперь я понимаю, что у вас может быть пара ключей/значений, в которых значение также есть и массив или ключ => значение. Очень признателен. – user2949794

+0

нет беспокойство. пожалуйста, проголосуйте за неприятности :) –

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