下面是数组输出,它显示用户数据,按月显示。我需要得到不同资源的ACTUAL_HOURS之和。
对于下面的ACTUAL_HOURS,User 1 and User 2的JUL-2015月份的和,应该是10 + 20 = 30。AUG-2015也是如此,它是80 + 20 = 100
$user_array输出
Array
(
[User 1] => Array
(
[JUL-2015] => Array
(
[SITE_STATUS] => Offshore
[ACTUAL_HOURS] => 10
[PROJECTED_HOURS] => 20
)
[AUG-2015] => Array
(
[SITE_STATUS] => Offshore
[ACTUAL_HOURS] => 80
[PROJECTED_HOURS] => 88
)
)
[User 2] => Array
(
[JUL-2015] => Array
(
[SITE_STATUS] => Offshore
[ACTUAL_HOURS] => 20
[PROJECTED_HOURS] => 0
)
[AUG-2015] => Array
(
[SITE_STATUS] => Offshore
[ACTUAL_HOURS] => 20
[PROJECTED_HOURS] => 0
)
)
)$project_months输出
Array
(
[0] => JUL-2015
[1] => AUG-2015
)循环如下所示的数据给出了求和,但对于User 1不是这样。
foreach ($user_array as $user_name => $user_data) {
foreach ($project_months as $month) {
}
}如何显示不同资源月份的ACTUAL_HOURS或PROJECTED_HOURS之和,如上面所示?
发布于 2015-11-17 08:44:40
您可以简单地使用两个foreach循环。
$hoursInMonth = array();
foreach ($users as $user)
{
foreach ($user as $month => $userData) {
$hoursInMonth[$month] += $userData['ACTUAL_HOURS'];
}
}考虑到$users变量是问题中的数组,这将产生以下结果:
Array
(
[JUL-2015] => 30
[AUG-2015] => 100
)您可以将它包装在一个函数中,这样就可以轻松地在所需的索引之间切换。
/**
* @param array $inputArray The input array
* @param string $typeOfHours The desired index
* @return array
*/
function calculateHoursInMonths(array $inputArray, $typeOfHours)
{
$hoursInMonth = array();
foreach ($inputArray as $user)
{
foreach ($user as $month => $userData) {
$hoursInMonth[$month] += $userData[$typeOfHours];
}
}
return $hoursInMonth;
}请注意,这没有考虑到离岸/陆上状态。您可以通过添加一个简单的if来添加它。
发布于 2015-11-17 08:41:45
你做错了。不需要两个嵌套的foreach循环。您只需要一个for循环循环到一个项目月循环,一个foreach循环循环到用户数组。
您没有在php代码中共享数组,但我假设您是数组,如下所示:
$array = array(
'User 1' => array(
'JUL-2015' => array(
'SITES_STATUS' => 'Offshore',
'ACTUAL_HOURS' => 10,
'PROJECTED_HOURS' => 20
),
'AUG-2015' => array(
'SITES_STATUS' => 'Offshore',
'ACTUAL_HOURS' => 80,
'PROJECTED_HOURS' => 88
),
),
'User 2' => array(
'JUL-2015' => array(
'SITES_STATUS' => 'Offshore',
'ACTUAL_HOURS' => 20,
'PROJECTED_HOURS' => 0
),
'AUG-2015' => array(
'SITES_STATUS' => 'Offshore',
'ACTUAL_HOURS' => 20,
'PROJECTED_HOURS' => 0
),
),
);月份如下:
$project_months = array('JUL-2015', 'AUG-2015');现在,要计算每个月所有用户的实际总时数,需要如下所示的循环:
for ($i=0; $i < count($project_months); $i++) {
$totalActualHours = 0;
foreach($array AS $ar) {
$totalActualHours += $ar[$project_months[$i]]['ACTUAL_HOURS'];
}
echo $project_months[$i].': '.$totalActualHours.'<br>';
}为ACTUAL_HOURS运行此代码时的输出:
JUL-2015: 30
AUG-2015: 100希望这能帮上忙。
https://stackoverflow.com/questions/33751995
复制相似问题