PHP — нахождение суммы значений для каждого идентификатора в ассоциативном массиве

#php #associative-array

#php #ассоциативный-массив

Вопрос:

У меня есть 2 массива. Первый массив представляет собой одномерный массив, который содержит идентификаторы пользователей.

Что-то вроде этого массива ( [0] => 1042800 [2] => 1184921 [4] => 724911 [66] => 1271106 )

У меня есть второй массив, который является ассоциативным массивом, который содержит информацию для каждого идентификатора пользователя. Это что-то вроде этого

 Harvest_DayEntry::__set_state(array('user-id'=>1042800 'hours'=>2 ,Harvest_DayEntry::__set_state(array('user-id'=>1042800 'hours'=>4 ))
  

На самом деле это была часть массива. Теперь меня интересует вычисление общего количества часов для каждого идентификатора пользователя.

Это то, что я пробовал.

 //Add all the Hours for a Given User ID
//$output is the Array of User ID's
$resultGetEntries=$api->getProjectEntries($project_id,$range); 
$dayEntries= $resultGetEntries->data;  

$i=0;
$sum=$sum[20];
$sum= array_fill(0, 20, 0);

foreach ($dayEntries as $key => $value) {
    if($output[i] == $value->get("user-id")) {
        $sum[$i] = $sum[$i]   $value->get("hours");
    }

    $i  ;
}
  

В конце концов я хочу получить что-то вроде этого

    User ID    Hours
   1042800       15      
   1184921       18
   724911        10 
   1271106        8
  

Я не слишком уверен, как это сделать. Кажется, я не могу понять, как мне перебирать ассоциативный массив и одновременно вычислять сумму для каждого идентификатора пользователя. Мне просто нужно знать правильную логику для решения этой проблемы.

Ответ №1:

Я предполагаю $resultGetEntries , что это ваш массив идентификаторов пользователей и массив $dayEntries Harvest_DayEntry s.

Самый простой способ объединить оба — выполнить итерацию по обоим в двойном цикле:

 $resultGetEntries = $api->getProjectEntries($project_id,$range); 
$dayEntries = $resultGetEntries->data;  

$sums = array();
foreach ($resultGetEntries as $i => $userId) {
    $sums[$userId] = 0;
    foreach ($dayEntries as $j => $dayEntry) {
        if ($dayEntry->get("user-id") == $userId) {
            $sums[$userId]  = $dayEntry->get("hours");
        }
    }
}
print_r($sums);