Advertisement
GWibisono

grup random

Apr 17th, 2015
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.50 KB | None | 0 0
  1. <?php
  2. /*
  3. dicoba beberapa kali (refresh).. berhasil menyebar sampe masing2 10
  4. tetapi malah coba/refresh.. dapet 14?!?
  5. */
  6. $maxLoop=5;
  7. $mhsOk=0;
  8. $grup1=0;
  9. $loop=9;
  10.  
  11. if (($handle = fopen("mahasiswa.csv", "r")) !== FALSE) {
  12.     $mhs=array();$row=0;
  13.     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  14.         //$num = count($data);
  15.         //echo "<p> $num fields in line $row: <br /></p>\n";
  16.         $row++;
  17.         if($row==1)continue;
  18. /*
  19.         for ($c=0; $c < $num; $c++) {
  20.             echo $data[$c] . "<br />\n";
  21.         }
  22. */
  23.         $a=array('nama'=>$data[0],'id'=>sprintf("15%02s%05s",$data[2],$row),'gender'=>$data[1], 'falCode'=>$data[2], 'stat'=>0);
  24.         $mhs[]=$a;
  25.        
  26.     }
  27.     fclose($handle);
  28. }
  29.  
  30. $total=count($mhs);
  31. $nGroup=ceil($total / 10);
  32.  
  33.  shuffle($mhs);
  34. $rule0=array('male'=>6,'female'=>4,'falCode'=>array());
  35. $rule=$rule0;$grup1++;
  36.  
  37. //echo "<hr>Grup $grup1";
  38.    
  39. while($mhsOk<$total){
  40.     $loop--;
  41.     if($loop<1) break;
  42.     foreach($mhs as $id=>$dt){
  43.         //check rule
  44.         $ok=1;
  45.         //====sudah masuk?
  46.         $stat=$dt['stat'];
  47.         if($stat==1)continue;
  48.         //===gender
  49.         $gender=strtoupper($dt['gender']);
  50.         if($gender=='P'&&$rule['female']<1){$ok=0;}
  51.         if($gender=='L'&&$rule['male']<1){$ok=0;}
  52.         if($ok==0)continue;
  53.        
  54.         //===jurusan
  55.         $jurusan=$dt['falCode'];
  56.         if(isset($rule['falCode'][$jurusan])&&$rule['falCode'][$jurusan]>1)$ok=0;
  57.         if($ok==0)continue;
  58.        
  59.         $mhs[$id]['stat']=1;
  60.         $groupMhs[$grup1][]=$mhs[$id];
  61.         //echo'<hr>';var_dump($mhs[$id]);
  62.         if($gender=='P'  ){$rule['female']--;}
  63.         if($gender=='L'  ){$rule['male']--;}
  64.         $mhsOk++;      
  65.         if(!isset($rule['falCode'][$jurusan])){
  66.             $rule['falCode'][$jurusan]=1;
  67.         }else{
  68.             $rule['falCode'][$jurusan]++;
  69.         }
  70.        
  71.         if(count($groupMhs[$grup1])==10){
  72.             $grup1++;
  73.             $rule=$rule0;
  74.             //echo "<hr>Grup $grup1";
  75.             $loop=$maxLoop;
  76.         }
  77.        
  78.     }
  79.    
  80.     if($loop==1){
  81.         $grup1++;
  82.         $rule=$rule0;
  83.         //echo "<hr>Grup $grup1";
  84.         $loop=$maxLoop;
  85.     }
  86.     //if($loop!=4){ echo "<br/>loop=$loop ".json_encode($rule);}
  87. }
  88.  
  89. echo "<br>Mahasiswa Yang Dapat kelompok:$mhsOk dari $total";
  90. if($mhsOk!=$total){
  91.     $mhsFail=array();
  92.     foreach($mhs as $id=>$dt){
  93.             if($dt['stat']==0)$mhsFail[]="$id=> ".json_encode($dt);
  94.  
  95.     }
  96.  
  97.     echo "<ol><li>".implode("</li><li>",$mhsFail)."</li></ol>";
  98. }
  99.  
  100. foreach($groupMhs as $id=>$team){
  101.     $s="<br/>Group $id<ol>";
  102.     foreach($team as $dt){
  103.         $s.="<li>$dt[nama] ($dt[gender]) =>$dt[falCode]</li>\n";
  104.     }
  105.     $s.="</ol>";
  106.     echo $s;
  107. }
  108. /*
  109. echo json_encode(array('data'=>$groupMhs,'created'=>'Gunawan');
  110.  
  111. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement