2011-01-11 11 views
0

회사에서 자동차 풀링 프로그램을 개발중인 응용 프로그램에 문제가 있습니다 (프로세스가 복잡합니다). 내가하고 싶은 것은 때라도입니다 :3 개 배열로 일치 항목 만들기

내가 3 명 3 개 팀이 각 팀은 인스턴스에 대해 고유 한 회원 ID를 가지고

그룹 1 = (1,2,3,4)

그룹 2 = (5,6,7,8)

그룹 3 = (9,10,11,12-)

아이디어는 두 멤버 (내가 생각의 가능한 한 많은 조합을 만드는 것입니다 회원 당 최소 8 명) 같은 그룹의 사람과 일치하지 않음. 예

1-5 1-6 1-7 1-8 1-9 1-10 1-11 1-12 2-5 2-6 들어

2-8 2-9 ... 2-7 그래서 이것은 (그것은 내가 달성하고자하는 것과 의미가 없을 수도 있지만, 내가 중학교 프로그래머 해요) 코드 조각입니다

<?php 

$numberSet = array(range(1,4), 
        range(5,8), 
        range(9,12) 
      ); 

$sizeofArray=count($numberSet); 

    for ($i=0; $i<$sizeofArray; $i++){ 
     for ($j=0; $j<count($numberSet[$i]); $j++){ 
      for ($k=0; $k<count($numberSet[$i]); $k++){ 
       echo $numberSet[$i][$j] . "<br>"; 
      } 
     } 
    } 
?> 
+0

그러면 가능한 모든 조합의 목록을 표시하고 싶습니까? 아니면 조합을 찾고 있습니까? 또는 함수를 원하고 ID를 전달하면 해당 ID에 대해 가능한 모든 조합이 반환됩니까? – Scoobler

+0

respone 주셔서 감사합니다! HR에 대한 목록을 보내 주시면 감사하겠습니다. :) – isJustMe

답변

1

실제로 달성하고 싶은 것을 정리하면 조금 더 도움이 될 것입니다.하지만 계속 진행하려면 여기에 일치하지 않고 한 그룹의 구성원에 대한 모든 일치 항목을 가져 오는 한 가지 방법이 있습니다. 자신의 그룹에서 누군가에게 - 나는 당신의 작업 세트에, 여러 ID 년대 아닌 간단한 1234, 5678를 가진 계획 9 10 11 12 가정합니다 : 마지막으로 하나의 사용자를 찾고

// Build an example array: 
    $numberSet = array(range(1,4), 
         range(5,8), 
         range(9,12)); 

    // The function will return an array of matches when passed the array and the ID: 
    function findCombos($id, $set) 
    { 
     // Store the matches found: 
     $matches = array(); 
     // Loop through each array in the multidimensional array which was passed: 
     foreach ($set as $group) 
     { 
      // Make sure the ID passed isn't a member of the current array, don't want its matches: 
      if (!in_array($id, $group)) 
      { 
       // Loop through each array as the ID isn't a member of this group: 
       foreach ($group as $member) 
       { 
        // Add the match the the matches array: 
        $matches[] = $member; 
       } 
      } 
     } 
     // Pass the matches back: 
     return $matches; 
    } 

일치 :

// Find all the matches for ID 2 from the multidimensional array: 
    $matches = findCombos("2", $numberSet); 
    // Display the nubmer of matches: 
    echo "Found ".count($matches)." matches for 2.<br/>"; 
    // Loop through each match found: 
    foreach ($matches as $match) 
    { 
     // Display the results: 
     echo "2 - ".$match."<br/>"; 
    } 

결과 :

Found 8 matches for 2. 
2 - 5 
2 - 6 
2 - 7 
2 - 8 
2 - 9 
2 - 10 
2 - 11 
2 - 12 

모든 가능성을 보여주고 싶었다 경우이 같은 것을 할 수있는 :

$count = 0; 
    foreach ($numberSet as $group) 
    { 
     foreach ($group as $member) 
     { 
      $matches = findCombos($member, $numberSet); 
      $count = $count+count($matches);  
      foreach ($matches as $match) 
      { 
       echo $member." - ".$match.", "; 
      } 
     } 
    } 
    echo "<br/>Found ".$count." possible combinations."; 

결과 :

1-5, 1-6, 1-7, 1-8을, 1 - 9, 1 - 10, 1 - 11, 1 - 12, 2 - 5, 2 - 6, 2 - 7, 2 - 8, 2 - 9, 2 - 10, 2 - 11,2 - 12 3 - 5, 3 - 6, 3 - 7, 3 - 8, 3 - 9, 3 - 10, 3 - 11 3 - 12 4 - 5 4 - 6 4 - 7 , 4 - 9, 4 - 10, 4 - 11, 4, 12, 15, 4, 11, 2, 6-3, 6-4, 6-9, 6-10, 6- 11, 6-12, 7-1,7-2,7-3,7- 4, 7-9, 10, 7-11, 7-12, 8-1, 8-2, 8-3, 8-8, 9-8-10, 8-11, 8-12, 9-19- 2, 9 - 3, 9 - 4, 9-5, 9-6, 9-7,9-8,10-1,10-2,10-3,10-4,10-5,10-- 6, 10-7, 10-8, 11-1, 11-2, 11-3, 11-4, 11-5, 11-6, 11-7, 11-8, 12-1, 12-2 , 12 - 3, 12 - 4, 12-5, 12 - 6, 12-7, 12-8,

경우 chenage $ numberSet에 :

$numberSet = array(array("a","b"), 
       array("c", "d", "e", "f"), 
       array("joe", "tom", "same") 
     ); 

결과 :

A - C, A - D, A - E, A - F, A - 조하는 - tom, a - same, b - c, b - d, b - e, b - f, b - 조, b - tom, b - 동일, c - a, c - b, c - joe, c - 톰, c - 동일, d - a, d - b, d - 조, d - 톰, d - 동일, e - a, e - b, e - 조, e - 톰, e - 동일, f - a, f - b, f - 조, f - 톰, f - 동일, joe - a, joe - b, 조 - c, joe - d, joe - e, joe - f , 톰 - 대답, 톰 - b, 톰 - c, 톰 - d, 톰 - e, 톰 - f, 같은 - a, 같은 - b, 같은 - c, 같은 - d, f,

+0

Excelent! 몇 가지 수정 사항이 완벽하게 맞는 무엇을 찾고있어! 감사! – isJustMe

+0

문제가 없지만 약간의 업데이트를 추가하여 발견 된 일치 항목의 수를 표시합니다. 한 사용자 또는 모든 사용자에게 적합합니다. – Scoobler

0

2 개 이상의 쌍만 계산하는 경우 다른 두 어레이를 간단히 계산할 수 있습니다. 당신은 array_diff를 살펴 할 수 있습니다 단순히 count(array2) + count(array3) = number of pairs

+0

그건 그렇고, 상상할 수있는 데이터베이스에 데이터를 보관하면이 프로세스가 훨씬 쉬울 것입니다. – dqhendricks

+0

응답 해 주셔서 감사합니다! 나는 그 일을 끝낼 것이라고 생각하지만 먼저 알고리즘을 갖고 싶습니다. 감사합니다! :) – isJustMe

0

하는 array1의 사람을위한

,(). 나는이 작업 같은 것을 볼 수 있습니다 : 그다지 명확하지 않았다 무엇

$everyone=range(1,12); 
$groups=array(range(1,4), range(5,8), range(9,12)); 
$cnt=count($groups); 
for($i=0;$i<$cnt;$i++) { 
    // this will give you all the people who aren't in your group 
    $diff=array_diff($everyone,$groups[$i]); 

    // loop and compare here 
} 

하는 한 쌍 "1-5"과 "5-1"동일 여부 즉 경우에 당신이 그들 고유 쌍 될 필요가있다 .

+0

응답 gadhra 주셔서 감사! 죄송 합니다만, "1-5"와 "5-1"은 다른 쌍으로 간주됩니다. 감사 ! – isJustMe

+0

그건 그렇고, 당신이 좋은 soultion을 제공하고는 있지만, ID가 연속적이지 않을 수도 있기 때문에 나는 범위를 만들 수 없습니다 (1,12). 예를 들어 1에서 4 7-10까지의 그룹을 가질 수 있습니다. – isJustMe