下面列出的数组包含三个连续日期的值。我试图计算第一个日期的值的总和,第二个日期的值的总和,以及第三个日期的值的总和之间的差异。
有关如何最好地完成此任务的任何建议?感谢。
Array
(
[Nov 18, 2011] => Array
(
[C] => Array
(
[C] => Array
(
[T] => 50803.805765535
)
[S] => Array
(
[T] => 32908.863528
)
)
)
[Dec 11, 2011] => Array
(
[C] => Array
(
[C] => Array
(
[T] => 31746.502038235
)
[S] => Array
(
[T] => 16836.613004414
)
)
)
[Dec 24, 2011] => Array
(
[C] => Array
(
[C] => Array
(
[T] => 43524.786543288
)
[S] => Array
(
[T] => 15722.772389011
)
)
)
)
答案 0 :(得分:0)
如果您的数组名为$ arr:
$totals = array();
foreach ($arr as $key => $val){
$totals[$key] = $val['C']['C']['T'] + $val['C']['S']['T'];
}
print_r($totals);
exit;
答案 1 :(得分:0)
我不确定我是否正确理解你的问题,但这是一次尝试。如果数组是$ a,则array_value_recursive()函数将仅提取每个日期的'T'值,然后回显两者之间的差异。输出如下:
Nov 18, 2011 (C 50803.805766 / S 32908.863528) - Dec 11, 2011 (C 31746.502038 / S 16836.613004) = C 19057.303727 / S 16072.250524
Dec 11, 2011 (C 32908.863528 / S 31746.502038) - Dec 24, 2011 (C 16836.613004 / S 43524.786543) = C 16072.250524 / S -11778.284505
代码是:
$keys = array_keys($a);
$values = array_value_recursive('T',$a);
for($i=0;$i<count($keys);$i++) {
if (isset($keys[$i+$i])) {
printf( "%s (C %f / S %f) - %s (C %f / S %f) = C %f / S %f\n",
$keys[$i], $values[$i+$i], $values[$i+$i+1],
$keys[$i+1], $values[$i+$i+2], $values[$i+$i+3],
$values[$i+$i] - $values[$i+$i+2],
$values[$i+$i+1] - $values[$i+$i+3]
);
}
}
function array_value_recursive($key, array $arr){
$val = array();
array_walk_recursive($arr, function($v, $k) use($key, &$val){
if($k == $key) array_push($val, $v);
});
return count($val) > 1 ? $val : array_pop($val);
}
修改:更正
后更新循环和值