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

时间:2011-12-08 03:26:11

标签: php arrays function sum

我需要创建一个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)

我愿意接受有关如何最好地实现这一目标的想法。我的直觉是拥有某种功能,然后传递类别和日期值。感谢。

1 个答案:

答案 0 :(得分:2)

取决于您可能想要执行此操作的次数以及是否需要为每个类别执行此操作等,无论您是使用函数还是仅使用简单的循环。

无论哪种方式,您都可以将以下内容放入函数中,只需传入$ 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;
}