2011-12-27 33 views
0

下面呈現的數組具有三個連續日期的值。我試圖計算第一個日期的總值與第二個日期的總值之間的差值,以及第三個日期的總值。PHP比較來自多維數組的總數

有關如何最好地完成此任務的任何建議?謝謝。

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 
        ) 
      ) 
    ) 
) 
+1

後「如何更好地做到這一點」 ---你可以實現它在任何時候,即使不是「最好」的方式? – zerkms 2011-12-27 04:33:02

+0

我幾乎沒有得到您需要執行的算術運算:「第一個日期的值與第二個日期的值的總和與第三個日期的值的總和之差「這很混亂。你的意思是total1-total2-total3? – 2011-12-27 05:17:57

+0

和總數是什麼意思?陣列[日期] [C] [C] [T] +陣列[日期] [C] [S] [T]? – 2011-12-27 05:19:30

回答

0

如果陣列被命名爲$ ARR:

$totals = array(); 

foreach ($arr as $key => $val){ 

    $totals[$key] = $val['C']['C']['T'] + $val['C']['S']['T']; 
} 

print_r($totals); 
exit; 
0

我不知道我100%正確地理解你的問題,但這裏的一個嘗試。如果數組是$ 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); 
} 

編輯:更新循環和值修正