2011-12-27 7 views
0

아래 제시된 배열은 연속 된 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

나는 어떤 산술 연산을 수행해야하는지 알지 못했습니다 : "첫 번째 날짜의 값의 합계와 두 번째 날짜의 값의 합계와 세 번째 날짜의 값의 합계 사이의 차이 "꽤 혼란 스럽다. 총 1-total2-total3을 의미합니까? –

+0

총계는 무엇을 의미합니까? 배열 [날짜] [c] [c] [t] + 배열 [날짜] [c] [s] [t]? –

답변

0

는 :

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

편집 : 같은 출력은 보이는