簡體   English   中英

PHP-基於鍵的數組值總和

[英]PHP - Sum of array values based on key

下面是數組輸出,按月顯示用戶數據。 我需要為不同的資源獲取ACTUAL_HOURS的總和。

對於以下情況, User 1 and User 2JUL-2015月的ACTUAL_HOURS之User 1 and User 2應為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_HOURSPROJECTED_HOURS對於不同的資源月份明智如上圖所示?

你做錯了。 不需要兩個嵌套的foreach循環。 您只需要一個for循環來遍歷項目月份,一個foreach循環來遍歷users數組。

您沒有在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

希望這會有所幫助。

您可以簡單地使用兩個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來添加它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM