2014-02-07 3 views
0

PHP로 배열을 작성하여 Flot 라인 차트에 표시하기 위해 프런트 엔드로 다시 보내려합니다. 한 달에 한 해씩 데이터를 표시해야합니다. 내 SQL 문에서 해당 달에 대한 값을 찾지 못하면 그 달의 배열 요소가없고 Flot 차트는 그 달의 데이터 포인트를 그릴 수 없습니다 (아래 스크린 샷의 Mar 및 Apr 참조). 나는 데이터가없는 곳에서 몇 달 동안 0 데이터 포인트를 보여주고 싶다. 내 배열을 만드는거야 방법은 다음과Flot에 제로 값이없는 배열 요소를 채우십시오

는 다음과 같습니다

 $array = array(); 
     $array['data'] = Array(); 
     $array['label'] = $tags[0]['tag_name']; 

     foreach($tags as $key=>$value) {     
      $month = $value['month']; 
      $arr = Array($month, $value['trans_amount']); 
      array_push($array['data'], $arr); 
     } 

전류 출력 :

{"data":[[1,"75.00"],[2,"170.00"],[5,"100.00"]],"label":"example label"} 

원하는 출력 : 여기

{"data":[[1,"75.00"],[2,"170.00"],[3, "0"],[4, "0"],[5,"100.00"]],"label":"example label"} 

하고 얼마나 차트 현재 th와 함께 표시 전자 전류 출력은 :

enter image description here

+0

$ month 변수를 출력하려고하면 1 ~ 5 개월이 걸립니까? $ tags 배열은 어떻게 생겼습니까? – rccoros

+0

데이터베이스의 유일한 데이터이기 때문에 1, 2 및 5 만 가져옵니다. 아무 것도 변경하지 않아도됩니다. 배열의 틈을 0으로 채우기 위해 PHP를 수정해야합니다. – hyphen

답변

1

이 작동합니다. foreach 루프를 약간 수정했습니다. 현재 달을 추적하는 추가 변수 $ monthVal이 필요합니다.

//Assuming this the month uptil which you want the data. 
    $current_month = 7; 
    $monthVal = 1; 
    foreach($tags as $key=>$value) {     
     $month = $value['month']; 
     if($month != $monthVal){ 
      while($month != $monthVal){ 
       $array['data'][] = Array($monthVal, "0"); 
       $monthVal += 1; 
      } 
     } 
     $arr = Array($month, $value['trans_amount']); 
     array_push($array['data'], $arr); 
     $monthVal += 1; 
    } 
    //This loop is added to append the array if the last entry is not equal to $current_month. 
    while($monthVal <= $current_month){ 
     $array['data'][] = Array($monthVal, "0"); 
     $monthVal += 1; 
    } 
+0

좋아,이 한 가지 예외가 작동하는 것 같습니다. 그것은 지난 달 비어 때 제로 배열 요소를 추가하는 것 같지 않습니다. 원래 예제에서 코드를 현재 월이 7 월 인 곳으로 변경하면 지난 달의 데이터가 5 월이므로 6 월과 7 월에 대한 요소가 추가되지 않습니다. 현재 달 ($ cur_month)의 변수도 있습니다.이 변수는이 문제를 해결하는 데 도움이 될 수 있습니다. 내 초기 생각은 $ monthVal <= $ cur_month 동안 말하는 while 루프에서 전체를 감싸는 것이 었습니다.하지만 시도 할 때 오류가 발생하는 것 같습니다. – hyphen

+0

@hyphen 나는 당신을 정확하게 이해한다면, 나는 당신에게 이번 달 uptil 데이터가 필요하다고 생각한다. 새로운 while 루프에서 foreach 루프 다음에 $ current_month 변수를 사용할 수 있습니다. 편집을 확인하십시오. – Kamehameha

+0

감사합니다. 완벽하게 작동합니다! – hyphen

0

이 (5.3+ PHP에서 작동) 시도 :이 일을해야

$array = array(); 
$month_min = $month_max = 0; 
foreach($tags as $value) { 
    $month = $value['month']; 
    $array[$month - 1] = array($month, $value['trans_amount']); 
    $month_max = $month; 
    if (!$month_min) $month_min = $month; 
} 

$months = array_values(array_map(function ($v) { return intval($v['month']); }, $tags)); 
$months_range = range(1, $month_max); 

foreach (array_diff($months_range, $months) as $month) { 
    $array[$month - 1] = array($month, 0); 
} 

$result = array(
    'data' => array_slice($array, $month - 1), 
    'label' => $tags[0]['tag_name'], 
); 
print_r(json_encode($result)); 
0

. 내가하는 일은 누락 된 달이 있는지 확인한 다음 그 달을 가치로 0으로 채 웁니다.

$currMonth = 1; 
foreach($tags as $key=>$value) {     
    $month = $value['month']; 
    if($month != $currMonth){ 
     //if we are missing some months populate that month with zero as value 
     while($month != $currMonth){ 
      array_push($array['data'],Array($currMonth, "0")); 
      $currMonth++; 
     } 
    } 
    $arr = Array($month, "'" . $value['trans_amount'] . "'"); 
    array_push($array['data'], $arr); 
    $currMonth++; 
} 

echo json_encode($array); 
0

나는 그것이 날짜로 저장되어있는 경우, 더 많은 데이터를 반환하기 위해 SQL 쿼리를 변경합니다. 날짜가 정수가 아닌 정수로 유지되도록하십시오. PHP와 SQL date 함수는 광범위하고 유용합니다.

이 간단한 for 루프는 foreach 앞에 SQL 쿼리의 누락 된 데이터로 배열을 채 웁니다.

for($i=1;$i<=12;$i++){ 
    if(!isset($tags[$i])){ 
     $tags[$i]['month'] = $i; 
     $tags[$i]['trans_amount'] = 0; 
    } 
} 
foreach($tags as $key=>$value) {     
    $month = $value['month']; 
    $arr = array($month, $value['trans_amount']); 
    array_push($array['data'], $arr); 
}