#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);