[英]PHP calculate running sum from array based on date value
我需要創建一個PHP函數,它將遍歷一個多維數組並返回一個值,該值表示某個鍵的總和,其中另一個鍵的值是<=傳遞給該函數的日期值。 這是數據數組的示例數組:
Array
(
[Nov 18, 2011] => Array
(
[C] => 100
[I] => 100
[M] => 100
)
[Nov 22, 2011] => Array
(
[C] => 200
[I] => 200
)
[Nov 29, 2011] => Array
(
[C] => 300
[I] => -300
)
)
永遠不會超過這3個類別[C],[I]和[M],並且每個日期的值應被視為運行總和。
那么,我如何計算截至2011年11月22日的[C]類別的價值? 正確的價值當然是300.(11月18日為100,11月22日為200)
如果我需要計算2011年11月29日的[I]值,該怎么辦? 這個例子中的正確答案是0.(100 + 200 - 300)
我對如何最好地實現這一點持開放態度。 我的直覺是擁有某種功能,然后傳遞類別和日期值。 謝謝。
取決於您可能想要執行此操作的次數以及是否需要為每個類別執行此操作等,無論您是使用函數還是僅使用簡單循環。
無論哪種方式,您可以將以下內容放入一個函數中,只需傳入$ target_date和類別(替換我在本例中使用的硬編碼“C”):
$c_total = 0;
foreach($main_array as $date => $sub_array)
{
if($date <= $target_date)
{
$c_total += $sub_array["C"];
}
}
編輯:為了清楚起見,這里使用strtotime()將日期值轉換為時間戳以便於比較的函數:
function getCategoryTotal($target_date, $category)
{
$c_total = 0;
$target_date = strtotime($target_date);
foreach($main_array as $date => $sub_array)
{
if(strtotime($date) <= $target_date)
{
$c_total += $sub_array[$category];
}
}
return $c_total;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.