假设我有这样的数组:
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得到总值?
或者,还有其他方法可以使它更简单吗?
答案 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));