PHP - hacer grupos de 15

   
Vista:

hacer grupos de 15

Publicado por Jose (37 intervenciones) el 28/07/2014 17:07:15
Buen día.


Mi problema es el siguiente:


Tengo un total x de personas y lo que necesito con esta cantidad es que me saque grupos de 15 personas, si algún grupo quedo entre 10 y 15 esas personas me las debe repartir en los grupos que ya existen que estan conformados de 15 personas.


La verdad llevo ya como 2 semanas haciendo esto y no me funciona, les escribo todo lo que llevo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<form method="post" action="menu.php?pag=crear_grupos3">
<table border="2">
<?php
	$semestre=$_GET['semestre'];
 
	if ($semestre=="2"){
		$letras="segundo";
	}
	else if ($semestre=="3"){
		$letras="tercer";
	}
	else if ($semestre=="4"){
		$letras="cuarto";
	}
 
	$apr=mysql_query("select distinct formulario_id_usuario from notas where semestres_semestre='sin definir' and materia LIKE '%$semestre%'",$conexion) or die (mysql_error());
	//$cont=mysql_num_rows($apr);
 
	$cont=55;
 
	$abecedario="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
	echo "<br><br><br>";
	echo "<font face='cambria' size='4'><b><i>Hay $cont estudiantes para el $letras semestre</i></b></font>"."<br><br><br>";
 
	$eso=0;
 
	while ($apre=mysql_fetch_array($apr)){
		$eso=$eso+1;
		$id_usu=$apre['formulario_id_usuario'];
		$no=mysql_query("select nombre from formulario where id_usuario='$id_usu'",$conexion) or die (mysql_error());
		$nom=mysql_fetch_array($no);
		$nombre=$nom['nombre'];
 
		$id_usuario[]="$eso-$id_usu-$nombre";
	}
 
	$cont_estu=0;
	$salto=0;
	$a=0;
	$ja=0;
 
	$cosas=0;
 
	$lo=0;
	$auto=0;
	$ko=0;
 
	for ($i=1;$i<=$cont;$i++){
		$ja=$ja+1;
		$cosas=$cosas+1;
		$clength=count($id_usuario);
 
		//echo $cosas;
 
		for($x=0;$x<$clength;$x++){
			$depr=explode('-',$id_usuario[$x]);
			$ide_usu=$depr[0];
			$id_usuario_bien=$depr[1];
			$nombre=$depr[2];
 
			if($ide_usu==$ja){
				echo "<font face='cambria' size='3'><i>$nombre ----> $semestre$abecedario[$a]</i></font>";
				echo "<input type='hidden' name='grupos[]' value='$id_usuario_bien-$semestre$abecedario[$a]~$semestre'>";
			}
		}
 
		if($salto++==14){
			$a=$a+1;
			$salto=0;
			$cont_estu=$cont_estu+15;
			echo "<br>";
			$cosas=0;
		}
		$total_sobraron=$cont-$cont_estu;
 
	}
 
	$grupos_sobraron=$total_sobraron/$a;
 
	echo "<br><br><br>";
 
	$valorInt=(integer)$grupos_sobraron;
 
	for ($c=1;$c<=$total_sobraron;$c++){
		$lo=$lo+1;
		$cont_sobra=count($id_usuario);
 
		echo "<font face='cambria' size='3'><i> $c ----> $semestre$abecedario[$ko]</font>"."<br>";
 
		if($auto++==$valorInt){
			$ko=$ko+1;
			$auto=1;
			echo "<br>";
		}
 
		$total_sobraron=$cont-$cont_estu;
	}
 
?>
<br><br>
<input type="submit" value="Guardar" class="btn btn-primary">
</table>
</form>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

hacer grupos de 15

Publicado por Alejandro (198 intervenciones) el 28/07/2014 21:29:09
Me programe esto, ya solamente lo adaptas a tu conveniencia.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
$minimos = 3; //Aqui el nuemero de integrantes para cada grupo (15 en tu caso)
$lista = array('Hugo','Paco','Luis','Bera','Chuck','Dave','Jacinto','Simitrio'); // Lista de todos los integrantes
 
if (intval(count($lista)/$minimos)>1){
 
    $equipos = array_chunk($lista,$minimos,false);
 
    $noEquipos = count($lista) / $minimos;
    if ($noEquipos != count($equipos) ){
        $repartir = ceil(count($equipos[$noEquipos-1])/$noEquipos);
        $i=1;
        do{
            $inicio = ($repartir * $i ) - $repartir;
            for ($i2=$inicio; $i2<($inicio+$repartir); $i2++){
                $equipos[$i-1][] = $equipos[$noEquipos][$i2];
            }
            $i++;
        }while($i<=$noEquipos);
    $noEquipos--;
    }
 
    for ($i=0; $i < $noEquipos; $i++){
        echo "<b>Equipo #".($i+1).":</b><br />";
        foreach ($equipos[$i] as $integrante){
            if ($integrante!="")
                echo "$integrante<br />";
        }
        echo "<br />";
    }
}else{
    echo "No se pueden hacer equipos de <b>$minimos</b> integrantes";
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

hacer grupos de 15

Publicado por Jose (37 intervenciones) el 28/07/2014 22:13:07
Mira como lo modifique

$minimos = 15; //Aqui el numero de integrantes para cada grupo (15 en tu caso)
$lista = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19'); // Lista de todos los integrantes


Y me entra al else y la verdad no se por que

Me podrias explicar Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

hacer grupos de 15

Publicado por Alejandro (198 intervenciones) el 28/07/2014 23:09:50
19 no pueden hacer 2 equipos de 15, minimo tienes que ser 2 equipos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

hacer grupos de 15

Publicado por Jose (37 intervenciones) el 28/07/2014 23:45:54
Entonces cuando pase esto me debería llenar el cupo con el resto de gente que sobra en este caso con 4, el grupo quedaría de 19 personas.

Ejemplo:

Hay 55 personas, me crearía 3 grupos de 15 personas y me sobran 10 personas, con estas 10 personas tocaría ingresarlos en los 3 grupos ya existentes por que nadie debe quedar fuera.


Como hacerlo ?.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

hacer grupos de 15

Publicado por Alejandro (198 intervenciones) el 29/07/2014 02:39:57
Hace lo que dice tu ejemplo, quedandote:
Equipo 1: 15+3
Equipo 2: 15+3
Equipo 3: 15+4

solo corrige la linea
1
$inicio = ($repartir * $i ) - $repartir+1;
Falto el "+1"

y en el else pues solo recorres el array lista
1
2
3
4
5
6
7
}else{
    foreach ($lista as $integrante){
        echo "<b>Equipo #1:</b><br />";
        if ($integrante!="")
            echo "$integrante<br />";
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar