PHP-基于键的数组值之和
下面是显示用户数据的数组输出,按月显示。我需要得到不同资源的实际工作时间的总和 对于以下情况,2015年7月用户1和用户2的实际_小时之和应为10+20=30。 2015年8月也是如此,即80+20=100 $user\u数组输出 $project\u月产出 像下面这样循环数据可以得到总和,但不适用于用户1PHP-基于键的数组值之和,php,arrays,Php,Arrays,下面是显示用户数据的数组输出,按月显示。我需要得到不同资源的实际工作时间的总和 对于以下情况,2015年7月用户1和用户2的实际_小时之和应为10+20=30。 2015年8月也是如此,即80+20=100 $user\u数组输出 $project\u月产出 像下面这样循环数据可以得到总和,但不适用于用户1 如上图所示,如何显示不同资源月份的实际小时数或预计小时数的总和?您做错了。不需要两个嵌套的foreach循环。您只需要一个for循环遍历项目月份,一个foreach循环遍历用户数组 您没有在
如上图所示,如何显示不同资源月份的实际小时数或预计小时数的总和?您做错了。不需要两个嵌套的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>';
}
希望这会有所帮助 您可以简单地使用两个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来添加它。为什么不以db为单位计算所有这些呢?当然,如果您将数据保存在db中。这会计算2015年7月的离岸/现场实际或预计小时数,即差异的现场和离岸小时数吗?@slimshaddyyy我添加了更多代码和输出供您查看。
JUL-2015: 30
AUG-2015: 100
$hoursInMonth = array();
foreach ($users as $user)
{
foreach ($user as $month => $userData) {
$hoursInMonth[$month] += $userData['ACTUAL_HOURS'];
}
}
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;
}