首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP根据日期值从数组计算游程总和

PHP根据日期值从数组计算游程总和
EN

Stack Overflow用户
提问于 2011-12-08 11:26:11
回答 1查看 1.4K关注 0票数 0

我需要创建一个PHP函数,它将循环遍历一个多维数组,并返回一个表示某个键的和的值,其中另一个键的值是传递给函数的日期值<=。以下是数据数组的示例数组:

代码语言:javascript
运行
复制
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
    )
)

C、I和M这三个类别的数量永远不会超过这三个类别,每个日期的值应该被认为是一个连续的总和。

那么,我如何计算截至2011年11月22日的C类别的价值?正确的值当然是300。(11月18日为100 +11月22日为200 )

如果我需要计算2011年11月29日的i值,该怎么办?本例中的正确答案应该是0。(为100 + 200 - 300)

我对如何最好地实现这一点持开放态度。我的直觉是使用某种函数,然后传入类别和日期值。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-12-08 11:35:28

这取决于你可能想要这样做的次数,以及你是否需要为每个类别这样做,等等,无论你是使用函数还是只使用一个简单的循环。

无论采用哪种方式,您都可以将以下代码放入一个函数中,只需传入$target_date和类别(替换本例中使用的硬编码的"C“):

代码语言:javascript
运行
复制
$c_total = 0;
foreach($main_array as $date => $sub_array)
{
    if($date <= $target_date)
    {
        $c_total += $sub_array["C"];
    }
}

编辑:为了清晰起见,下面的函数使用strtotime()将日期值转换为时间戳以便于比较:

代码语言:javascript
运行
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8425771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档