2016-08-15 7 views
3

私はこれを前に言っておきますが、すべての組み合わせを得るつもりはありません。各アレイ内のアイテムを繰り返さずに複数のアレイを組み合わせて作成する

私は、各プレイヤーが元のチームの別のプレイヤーと新しいチームにいなくても、チームごとに6人のプレイヤーのすべての組み合わせを取得しようとしています。 例えば

$team1 = "John, Joey, Steve, Lee"; 
$team2 = "Tom, Alex, Billy"; 
$team3 = "Clint"; 
$team4 = "Alan, Jerry"; 
... 
$team10 = "James, Corey, Paul, Benny"; 

ジョンとジョーイは、将来の組み合わせであることができません。トムとビリーの将来の組み合わせは決してできません。しかし、私は10チームのそれぞれから1人の選手のすべての組み合わせを取得しようとしています。 私は連想配列$チームのすべてのチームを持っています

私はこの機能を使用しようとしていますが、私は間違っていると思います。

function combinations($arrays, $i = 0) { 
    if (!isset($arrays[$i])) { 
     return array(); 
    } 
    if ($i == count($arrays) - 1) { 
     return $arrays[$i]; 
    } 

    // get combinations from subsequent arrays 
    $tmp = combinations($arrays, $i + 1); 

    $result = array(); 

    // concat each array from tmp with each element from $arrays[$i] 
    foreach ($arrays[$i] as $v) { 
     foreach ($tmp as $t) { 
      $result[] = is_array($t) ? 
       array_merge(array($v), $t) : 
       array($v, $t); 
     } 
    } 

    return $result; 
} 

print_r(
    combinations(
     array(
      $team[1], 
      $team[2], 
      $team[3], 
      $team[4], 
      $team[5], 
      $team[6], 
      $team[7], 
      $team[8], 
      $team[9], 
      $team[10] 
     ) 
    ) 
); 
+0

はそう$ team1、$のteam2、......私は全体の連想配列から任意の重複を排除してきたんcommmon – coder

+0

のプレイヤーを持っています。各チームには異なるプレイヤーがいます。しかし、彼らの新しいチームでは、彼らは元のチームメイトとチームになることはできません。 – Kaff1n8t3d

+0

重複した名前で何をしていますか?たとえば、「Chris」という名前の人が2人いる場合 – Chris

答えて

1

これは必要なものですか?

 <?php 
     $team1 = array("John", "Joey", "Steve", "Lee"); 
     $team2 = array("Tom", "Alex", "Billy"); 
     $team3 = array("Clint","a","c"); 
     $team4 = array("Alan", "Jerry"); 
     $team5 = array("John1", "Joey1", "Steve1", "Lee1"); 
     $team6 = array("Tom1", "Alex1", "Billy1"); 
     $team7 = array("Clint1","b","d"); 
     $team8 = array("Alan1", "Jerry1"); 
     $team9 = array("John2", "Joey2", "Steve2", "Lee2"); 
     $team10 = array("Tom2", "Alex2", "Billy2"); 


     $noTeams = 10; 

     //$noNewTeams = 10; 

     $membersPicked = array(); 
     $teamsDone = 0; // the whole team picked up 
     $teamMemsDone = array(); 



     for($i=1; $i<11; $i++){ 
      $teamName = "team".$i; 
      $teamMemsDone["$teamName"] = 0; 

     } 






     $n=1; 

     //for($n=1; $n<$noNewTeams+1; $n++) { 
     // $index = $n+1; 

     do { 

      unset($teamPicked); 
      unset($newTeam); 
      $newTeam = array(); 
      $teamPicked = array(); 

      //for($i=0; $i<6; $i++) { 
      do { 
       // pick up 6 team members for new team 

       foreach($teamPicked as $key=>$value) { 
        //echo "$key => $value .... <br>"; 
       } 


       do { 
        $teamNo = rand(1,$noTeams); 
       }while(in_array($teamNo, $teamPicked)); 

       array_push($teamPicked, $teamNo); 

       $teamName = "team".$teamNo; 
       $memsOfTeam = count($$teamName); 

       $thisTeam = $$teamName; 

       //echo "$teamNo, $teamName, $memsOfTeam <br/>"; 
       $member = ""; 
       $memberName = ""; 
       $noOfTimes = 0; 
       do { 
        $member = array_rand($$teamName,1); 
        $memberName = $thisTeam[$member]; 
        $noOfTimes ++; 
       }while(in_array($memberName, $membersPicked) && $noOfTimes < $memsOfTeam); 

       if($memberName != "") { 
        //echo $thisTeam[$member] ." <br/>"; 
        array_push($membersPicked, $memberName); 

        $teamMemsDone["$teamName"] += 1; 

        if($teamMemsDone["$teamName"] > $memsOfTeam) { 
         $teamsDone ++; 

         echo "$teamName - done. <br/>"; 
        } 

        array_push($newTeam, $memberName); 
       } 


       // echo " new team members selected = " . count($newTeam) . "<br/>"; 


      } while(count($newTeam)<6); 

      $newTeamName = "newTeam".$n; 
      $$newTeamName = $newTeam; 
      echo $newTeamName ."<br/>"; 

      $n++; 


      foreach($$newTeamName as $key=>$val){ 
       echo "$key => $val <br/>"; 
      } 
      echo "<br/>"; 

      echo $teamsDone ."<br/>"; 

     }while($teamsDone < $noTeams); 

     //} 


     ?> 
+0

私は家に帰るとこれをもっと見るでしょうが、これはわずか10の結果しか得られないように見えます。私は現在のチームメイトが新しいチームで一緒にいなくても、私が作ることができるすべてのチームを探しています。 – Kaff1n8t3d

+0

答えを編集しました...確認してください...これが正常に動作するかどうかは分かりません... –

+0

申し訳ありませんが、私は応答するまでには時間がかかりましたが、これをもう少し調べています。デカルト製品。しかし、私はあなたがここで作ったランダムな機能を愛する。それは良いものです!私はそれぞれの行が何をしているのか理解していないあなたは機能のセクションを説明してくださいできますか? – Kaff1n8t3d

関連する問題