2014-06-08 4 views
1

나는 데이터베이스에서 그룹으로 제목과 동반 배열을 모으는 while 루프 안에 있습니다.배열별로 그룹화하는 좀 더 효율적인 방법이 있습니까?

내 데이터는 (내가 더 많은 필드가 필요하지만 간단하게하기 위해 나는 두를 보여주의하십시오) 다음과 같습니다 : 나는 while 루프 각 라인을 통해 실행 해요

**Title**    | **Groups** 
Random Title One | array(Group A) 
Another Title  | array(Group A, Group B, Group C, Group D, Group E) 

. 이제 나는 그룹별로 이것을 보여주고 싶다. 이처럼 :

Group A: Random Title One, Another Title 
Group B: Another Title 
Group C: Another Title 
Group D: Another Title 
Group E: Another Title 

나는이이 그룹을 통해가는 내 while 루프 내부 foreach 루프 함께 처리 할 볼 수있는 가장 좋은 방법.

<?php 

    foreach ($arrayGroups as $group) { 
     switch ($group) { 
      case "Group A": 
       $arrGroupA[]['title'] = $title; 
       break; 
      case "Group B": 
       $arrGroupB[]['title'] = $title; 
       break; 
      case "Group C": 
       $arrGroupC[]['title'] = $title; 
       break; 
      case "Group D": 
       $arrGroupD[]['title'] = $title; 
       break; 
      case "Group E": 
       $arrGroupE[]['title'] = $title; 
       break; 
     } 
    } 
?> 

는 그러나, 나는 더 이상 5 개 그룹이 없음을 알면서도, 나는이 방법을 좋아하지 않아이이 작업을 수행하는 가장 좋은 방법인지 의심이 같을 것이다 .

아이디어가 있으십니까?

foreach ($arrayGroups as $group) { 
     $groups[$group][] = array( 
      'title' => $title, 
     ); 
} 

당신이 그것을하지만 빠른 성능이 현명 경우 $groups[groupName][some index]['title']

확실하지에 액세스 할 수 있습니다 그 방법을하지만, 그것은 당신을 수 있습니다 :

답변

1

당신은 예를 들어, 하나의 배열에 이르렀 시도 할 수 있습니다 다양한 양의 그룹을 자동으로 입력 할 수 있습니다. 당신이 당신의 결과는 항상 순서가 될 것입니다 알고 있다면

+0

, 당신을 감사 내가 더 나은 다음 내 길을 좋아한다! 특히 그룹 이름은 하드 코딩되어 있지 않으므로 특히 그렇습니다. –

0

array(Group A, Group B, Group C, Group D, Group E) 

또는

을 말할 수
array(Group A, Group D, Group E) 

당신은 아마 수행하지 않음으로써 더 효율적으로 만들 수있다 모든 비교는 매번. 즉, '그룹 A'가 항상 맨 먼저 표시되므로 레코드 배열의 두 번째 그룹에있는 경우 '그룹 A'비교를 수행하지 마십시오. 스위치에서 '휴식'과 같은 것이있을 때 여전히 "단락"하고 싶습니다. 여기

몇 가지 자바와 같은 의사 코드입니다 미안 해요 PHP는 사람이 아니다 :

//traverse all groups for the current record 
for (int i=0; i<currentRecordGroups.length; i++) { 

    // traverse the possible groups, starting with the index of the 
    // current group from the current record (allGroups must also be sorted) 
    for(int j = i; j<allGroups.length; j++) { 

    if(currentRecordGroups[i] == allGroups[j]) { 
     // add the title to the collection for group allGroups[j] here... 
     break; //break for j 
    } 
    } 
} 
관련 문제