按键计算数组值

时间:2015-06-24 18:39:19

标签: php sql arrays

假设我有这样的数组:

Array (
[2015-03-14] => 3
[2015-05-23] => 10 
[2015-06-21] => 7 
[2015-05-24] => 3
[2015-06-27] => 10 
[2015-06-29] => 7
) 

说明:

钥匙是DATE,有几个不同的月份和日期(03 = 3月,05 = 5月等)

问题

如何根据Key计算总值,例如有人设置日期范围字段(在前端页面中)并将从Key 2015-03-14到2015-06-27得到总值?

或者,还有其他方法可以使它更简单吗?

3 个答案:

答案 0 :(得分:0)

如果您知道您的密钥将始终是日期,您可以使用密钥构建日期对象并使用日期比较。

<?php

$arr = array(
    '2015-03-14' => 3,
    '2015-05-23' => 10,
    '2015-06-21' => 7, 
    '2015-05-24' => 3,
    '2015-06-27' => 10, 
    '2015-06-29' => 7,
);

$rangeStart = date('2015-03-14');
$rangeEnd = date('2015-06-27');

$sum = 0;
foreach ($arr as $key=>$value) {
    $d = date($key);
    if ($d >= $rangeStart && $d <= $rangeEnd) {
        $sum += $arr[$key];
    }
}

echo $sum;

答案 1 :(得分:0)

我要问的第一件事是,您是否可以访问SQL接口来获取此信息?这样的事情可以通过SQL更好地处理 。如果您可以从一开始就只从数据库中选择所需的条目,那么生成的代码将表现更好,更容易理解并且更容易编写。

根据您的架构,代码可能如下所示(假设您应该使用PDO):

$stmt = $db->prepare("
    SELECT SUM(your_count_field) 
    FROM your_table
    WHERE your_date_field BETWEEN '?' AND '?'
");
$result = $stmt->execute([$date_start, $date_end]);

如果没有,我认为没有一个简单的方法。 @mittmemo有一个非常好的解决方案,但如果您必须从超过100个条目中选择,或者如果您有一天需要这种容量,我就不会使用它。

答案 2 :(得分:0)

如果使用PHP 5.6或更高版本,

$input = [
    '2015-03-14' => 3,
    '2015-05-23' => 10 ,
    '2015-06-21' => 7 ,
    '2015-05-24' => 3,
    '2015-06-27' => 10 ,
    '2015-06-29' => 7
];

$start_date     = '2015-05-23';
$end_date       = '2015-06-29';

$sum = array_sum(array_filter($input, function($date) use ($start_date, $end_date){
                    return ( ( $date >= $start_date ) && ( $date <= $end_date ) );
                }, ARRAY_FILTER_USE_KEY));