繁体   English   中英

PHP根据日期值从数组计算运行总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM