下面是按月显示用户数据的数组输出。我需要为不同的资源获得ACTUAL_HOURS
的总和。
如下所示,User 1 and User 2
个月JUL-2015
的ACTUAL_HOURS总和应为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
的总和?
答案 0 :(得分:0)
你做错了。不需要两个嵌套的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
希望这会有所帮助。
答案 1 :(得分:0)
你可以简单地使用两个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
来添加它。