2010-06-19 4 views
3

숫자가 다를 수있는 그룹 목록이 있습니다.이 그룹의 항목 수도 숫자가 다릅니다. 나는 모든 그룹에서 1 개의 아이템의 모든 가능한 조합을 얻을 수있는 방법을 고집했다.X 그룹의 N 개 항목을 모두 조합 할 수 있습니다. 그룹

보너스 : 그룹의 모든 항목이없는 모든 조합도 필요합니다.

저는 mentioned before을 보았습니다.하지만 그룹의 수를 알고 있어야합니다.

내가하는 일에 대해 구체적으로 설명하기 위해 제품 옵션을 기반으로 한 정확한 가격으로 제품을 생성하고 싶습니다.

UV 코팅, 수량 (500), 컬러 4 : 0
UV 코팅, 수량 (500), 컬러 4 : 1

Group/Item Example

는 그래서 같은 제품을 생성하는 것입니다 예를 들면 다음과 같습니다 목록입니다 ...

각 그룹에는 ID가 있으며 각 항목에는 Group_Item_ID가 있습니다. 그래서 다음과 같은 배열에 넣을 수 있습니다 :

$selections[1][...] // 1 = Coating 
$selections[2][...] // 2 = Quantity 
// ... = all selected Items in group 

희망을 충분히 설명했습니다. 그룹 수를 가변 할 때이를 수행하는 방법에 대해 머리를 감쌀 수 없습니다.

Array 
(
[0] => Array 
    (
     [0] => 2 
     [1] => 3 
    ) 

[1] => Array 
    (
     [0] => 10 
     [1] => 11 
     [2] => 12 
    ) 

[2] => Array 
    (
     [0] => 16 
     [1] => 17 
    ) 

[3] => Array 
    (
     [0] => 19 
     [1] => 20 
    ) 
) 
+0

명확히하기 위해, 당신은 각각의 군에서 선택되는 하나 개의 요소의 모든 가능한 조합 싶어? –

+0

예, 모든 조합은 각 그룹에서 하나의 요소를 사용합니다. – drewjoh

답변

4

이 시도 :

여기에 그룹과 항목에 대한 예를 들어 배열의

function c($groups, $prefix='') 
{ 
    $result = array(); 
    $group = array_shift($groups); 
    foreach($group as $selected) { 
     if($groups) { 
      $result = array_merge($result, c($groups, $prefix . $selected. ' ')); 
     } else { 
      $result[] = $prefix . $selected; 
     } 
    } 
    return $result; 
} 
+0

당신이 뭔가있는 것 같아요! 배열의 마지막 두 그룹의 조합 만 제공합니다. 나는 지금 당장 그것에 놀고 있고,보고 할 것이다. – drewjoh

+0

그래, 배열의 마지막 두 그룹의 조합 만 가져옵니다. 그리고 그것은 여러 번 조합을합니다. 나는 아직도 그것으로 일하고있다. – drewjoh

+1

죄송합니다! 나는이 코드에서 작은 실수를 저질렀다. – Mewp

관련 문제