2012-08-30 2 views
-2
I 2 바 (년 1998에서 2000까지) 2 년 범위

의 백색 공간이 구분이 있어야이 배열 누적 막대 그래프를 그릴 필요

와 배열에 걸쳐 총 년 찾기 문제 : 가 첫 번째 막대는 같아야는 array 1

에서 array0에서 20002008을 복용했던 것처럼 내

*1998-1997* - *2 years gap* - *2000-2008* 

막대가 짧은 년 스팬을 병합한다

Array 
(
    [comp_name] => C++ 
    [parent_cat_name] => Information Technology 
    [sub_cat_name] => Programming 
    [total_years] => 6 
    [last_year] => 2006 
    [start_year] => 2000 
) 

Array 
(
    [comp_name] => .NET 
    [parent_cat_name] => Information Technology 
    [sub_cat_name] => Programming 
    [total_years] => 7 
    [last_year] => 2008 
    [start_year] => 2001 
) 

Array 
(
    [comp_name] => API 
    [parent_cat_name] => Information Technology 
    [sub_cat_name] => Programming 
    [total_years] => 1 
    [last_year] => 1998 
    [start_year] => 1997 
) 
+0

을 어디 코드를 바 - 그래프 것 :

당신은 할 수 있는가? –

+0

막대 그래프 코딩은 문제가 아니지만 년 간격을 찾으려면 –

+0

그래프 작성 스크립트를 게시하여 실제로 그래프를 작성한다는 것을 알 수 있습니까? 이것은 꽤 불분명 한 것 같습니다. 위의 배열에서 – gkiar

답변

0

일부 조건에 따라 인접하고 다른 일부 필드에 동일한 조건이있는 경우 두 개의 배열 항목을 병합하려고합니다.

for(;;) 
{ 
    $merge = array(); 
    $n  = count($data); 
    for ($i = 0; empty($merge) && $i < $n-1; $i++) 
    { 
     for ($j = $i+1; empty($merge) && $j < $n; $j++) 
     { 
      // Are $i and $j congruent? 
      if ($data[$i]['parent_cat_name'] != $data[$j]['parent_cat_name']) 
       continue; 
      if ($data[$i]['sub_cat_name'] != $data[$j]['sub_cat_name']) 
       continue; 

      // Are $i and $j adjacent? 
      if ($data[$i]['last_year']+1 == $data[$j]['start_year']) 
      { 
       $merge = array($i, $j); 
       break; 
      } 
      if ($data[$j]['last_year']+1 == $data[$i]['start_year']) 
       $merge = array($j, $i); 
       break; 
      } 
      // They are congruent but not adjacent, try the next 
     } 
    } 
    // If we get to the end and find nothing mergeable, exit. 
    if (empty($merge)) 
     break; 
    list($i, $j) = $merge; 
    // We add $j to $i 
    $data[$i]['last_year'] = $data[$j]['last_year'] 
    $data[$i]['total_years'] += $data[$j]['total_years'] 
    // We destroy $j 
    unset($data[$j]); 
    // Dirty renumber 
    $data = array_values($data); 
    // Now data has been modified, let's do this again. 
}