Php 与非奇异性相关的数组值之和

Php 与非奇异性相关的数组值之和,php,arrays,sum,Php,Arrays,Sum,假设我有两个大小相同的数组,其中填充了值。日期数组包含字符串格式的日期,成本数组包含数字成本。 例如: $dates = array('2001-01-01', '2001-02-01', '2001-02-01', '2001-02-01', '2001-03-01', '2001-04-01', '2001-04-01', '2001-05-01'); $costs = array(5, 10, 20, 4, 30, 14, 2, 0); 我想要的是,仅当$dates数组中的日期重复时,才

假设我有两个大小相同的数组,其中填充了值。日期数组包含字符串格式的日期,成本数组包含数字成本。 例如:

$dates = array('2001-01-01', '2001-02-01', '2001-02-01', '2001-02-01', '2001-03-01', '2001-04-01', '2001-04-01', '2001-05-01');
$costs = array(5, 10, 20, 4, 30, 14, 2, 0);
我想要的是,仅当$dates数组中的日期重复时,才将costs数组中的数字求和到一个新数组中。发生这种情况时,新数组值必须是其“左同级”的总和。其余新数组值应为0。在另一种情况下(当日期在数组中唯一时,则新数组值为0)

这应该是上述过程的结果:

$newarr = array(5, 0, 0, 34, 30, 0, 16, 0);
这个怎么样

$result = $costs;
foreach ($dates as $i => $d) {
    if ($i > 0 && $dates[$i - 1] == $dates[$i]) {
        $result[$i] += $result[$i - 1];
        $result[$i - 1] = 0;
    }
}
print_r($result);
我们从我们的
$costs
数组开始,循环遍历所有日期。。。每次检测到日期与前一个条目相同时,我们都会将前一个条目归零,并将其值添加到当前位置

替代溶液 这并不是你想要的,但我怀疑更有用的解决方案可能是:

$result = array();
foreach ($dates as $i => $d) {
    $result[$d] = (isset($result[$d]) ? $result[$d] : 0) + $costs[$i];
}
print_r($result);
这将产生以下结果:

array(
    '2001-01-01' => 5,
    '2001-02-01' => 34,
    '2001-03-01' => 30,
    '2001-04-01' => 16,
    '2001-05-01' => 0
)

老兄,太快了!在发布了替代解决方案后,您也解决了这个问题,这比我想象的还要好!非常感谢。