[英]PHP - Sum of array values based on key
下面是數組輸出,按月顯示用戶數據。 我需要為不同的資源獲取ACTUAL_HOURS
的總和。
對於以下情況, User 1 and User 2
在JUL-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_HOURS
或PROJECTED_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.