Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-基于键的数组值之和_Php_Arrays - Fatal编程技术网

PHP-基于键的数组值之和

PHP-基于键的数组值之和,php,arrays,Php,Arrays,下面是显示用户数据的数组输出,按月显示。我需要得到不同资源的实际工作时间的总和 对于以下情况,2015年7月用户1和用户2的实际_小时之和应为10+20=30。 2015年8月也是如此,即80+20=100 $user\u数组输出 $project\u月产出 像下面这样循环数据可以得到总和,但不适用于用户1 如上图所示,如何显示不同资源月份的实际小时数或预计小时数的总和?您做错了。不需要两个嵌套的foreach循环。您只需要一个for循环遍历项目月份,一个foreach循环遍历用户数组 您没有在

下面是显示用户数据的数组输出,按月显示。我需要得到不同资源的实际工作时间的总和

对于以下情况,2015年7月用户1和用户2的实际_小时之和应为10+20=30。 2015年8月也是如此,即80+20=100

$user\u数组输出

$project\u月产出

像下面这样循环数据可以得到总和,但不适用于用户1


如上图所示,如何显示不同资源月份的实际小时数或预计小时数的总和?

您做错了。不需要两个嵌套的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;
}