2011-12-08 6 views
0

다차원 배열을 통해 루프하고 특정 키의 합계를 나타내는 값을 반환하는 PHP 함수를 만들어야합니다. 다른 키의 값은 <입니다. = 함수에 전달 된 날짜 값. 여기서, 데이터 어레이의 샘플 배열이다PHP는 날짜 값을 기준으로 배열에서 누적 합계를 계산합니다.

Array 
(
[Nov 18, 2011] => Array 
    (
     [C] => 100 
     [I] => 100 
     [M] => 100 
    ) 
[Nov 22, 2011] => Array 
    (
     [C] => 200 
     [I] => 200 
    ) 
[Nov 29, 2011] => Array 
    (
     [C] => 300 
     [I] => -300 
    ) 
) 

이들 3 개 카테고리 [C] 이상이 없을 것은, [I]과 [M] 각 날짜에 대한 값은 누적 합계 고려되어야한다.

그렇다면 2011 년 11 월 22 일 현재 [C] 카테고리의 가치는 어떻게 계산합니까? 정확한 값은 물론 300입니다. (11 월 18 일부터 100 일과 11 월 22 일까지 200 일)

2011 년 11 월 29 일 기준으로 [I] 값을 계산해야한다면 어떻게해야합니까? 이 예제의 정답은 0입니다. (100 + 200 - 300)

저는 이것을 달성하는 최선의 방법에 대한 아이디어를 제공합니다. 필자의 본능은 일종의 기능을 가지고 범주와 날짜 값을 전달하는 것입니다. 감사.

+0

합계를 저장하거나 합계를 계산 하시겠습니까? 당신은 * 각각의 값은 합계 *가되어야한다고 말했지만 예제는 재 계산 *을 보여줍니다. –

답변

2

이 작업을 원하는 횟수와 함수 또는 단순한 루프를 사용하는지 여부와 상관없이 각 카테고리에 대해 수행해야 할 횟수에 따라 다릅니다.

어느 쪽이든 당신은 (내가이 예를 들어 사용하고 하드 코드 된 "C"를 대체) 함수에 다음을 넣어 단지 $의 target_date 및 범주에 전달할 수 :

$c_total = 0; 
foreach($main_array as $date => $sub_array) 
{ 
    if($date <= $target_date) 
    { 
     $c_total += $sub_array["C"]; 
    } 
} 

편집 : 좀 더 쉽게 비교할 수 있도록 strtotime()을 사용하여 날짜 값을 타임 스탬프로 변환하는 함수는 다음과 같습니다.

function getCategoryTotal($target_date, $category) 
{ 
    $c_total = 0; 
    $target_date = strtotime($target_date); 
    foreach($main_array as $date => $sub_array) 
    { 
     if(strtotime($date) <= $target_date) 
     { 
      $c_total += $sub_array[$category]; 
     } 
    } 
    return $c_total; 
} 
+0

끝내 주셔서 고마워요. 내가 한번 시도해 보자. – DanielAttard

+0

작동에 문제가 있습니다. 함수 버전에'return' 문이 없습니다. 그게 의도적 인거야? 날짜 값을 무언가로 감싸는 것처럼 처리해야합니까, 아니면 그대로 사용합니까? – DanielAttard

+0

함수의 반환을 포함하도록 내 대답을 편집했습니다. 날짜 값과 관련하여 strtotime()을 사용하여 타임 스탬프 값으로 변환 한 후 – TheOx

관련 문제