2011-12-27 28 views
0

以下に示す配列は連続する3つの値を持っています。私は最初の日付からの値の合計と2番目の日付からの値の合計と3番目の日付からの値の合計との差を計算しようとしています。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

+0

私はあなたが実行する必要のある算術演算をほとんど取得できませんでした:「最初の日付からの合計値と2番目の日付からの合計値と3番目の日付からの合計の差"それはかなり混乱している。合計1-total2-total3を意味しましたか? –

+0

とは何ですか?配列[日付] [c] [c] [t] +配列[日付] [c] [s] [t]? –

答えて

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); 
} 

編集:あなたが実装することができます---「これを達成するために最善の方法」