2013-09-28 5 views
0

다차원 배열로 더 많은 작업을해야만 SQL 쿼리의 수를 줄일 수 있습니다. 문제는 그들이 나에게 새로운 것입니다. 누군가가 내게 어떤 방향으로 이것을 줄 수 있습니까?다차원 배열 - 월 단위로 그룹화하기

다음은 배열의 예 :

Array 
(
    [0] => Array 
     (
      [0] => 2013-07-01 
      [1] => Andy 
      [2] => Hopkins Module 
     ) 

    [1] => Array 
     (
      [0] => 2013-07-01 
      [1] => Frank 
      [2] => Rotation 
     ) 

    [2] => Array 
     (
      [0] => 2013-07-01 
      [1] => James 
      [2] => Morning Report 
     ) 

    [3] => Array 
     (
      [0] => 2013-08-01 
      [1] => James 
      [2] => Noon Conference 
     ) 

이 배열은 더 많은 이름과 개월에 계속됩니다. 데이터는 이름순으로 정렬되며 모든 James 항목이 그룹으로 나열됩니다. 각 이름 그룹에는 하나 이상의 데이터 요소가있을 수 있습니다. 내가하고 싶은 것은 매월 반복하고 두 번째와 세 번째 값을 출력하는 것입니다. 모든 것을 인쇄하기 위해 while 문을 수행하는 방법을 알고 있지만 모든 데이터를 한 달에 그룹화하는 방법을 모르겠습니다.

+1

잘못된 방법입니다. 먼저, 나중에 SQL을 최적화하는 방법으로 배열을 너무 많이 사용하지 않아도됩니다. – djot

+0

다음은 몇 가지 좋은 아이디어입니다 : http://stackoverflow.com/questions/2189626/group-a-multidimensional-array-by-a-particular-value (** ** 코드를 작성할 수 있지만 더 좋고/네가 스스로하는 경우 더 보람있는). – Styxxy

+0

@djot의 경우 데이터가 반드시 SQL 데이터베이스에서 가져올 필요는 없습니다. – Styxxy

답변

1

주고이 시도는 (당신이 보여 배열 변수 $old_array에 할당 된 가정) :

foreach ($old_array as $key => $value) { 
    $new_array[$value[0]][] = array($value[1], $value[2]); 
} 
// Uncomment the next line to print the new array 
// print_r($new_array); 
0

내가 jerdiggity의 코드의 수정 된 버전으로 그것을 할 수 있었다 ... 그리고 유일한 방법 나는 그것이 일하도록 몹시 못생긴 것이다. 이러한 많은 중첩 루프가 공통적입니까?

foreach ($incomplete as $key => $value) { 
     $new_array[$value[0]][$value[1]][] = $value[2]; 
    } 


    foreach($months as $k=>$v) { 
     $format = formatDate($v); 
     echo $format; // date formatted as readable 
     foreach($new_array[$format] as $k1=>$v1){ 
      echo $k1.'<br>'; //name of person 
      foreach($v1 as $k2=>$v2) { 
       echo $v2.'<br>'; //third value or original array 
      } 
     } 
    }