PHP - Generar partidos todos vs todos

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 17 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar partidos todos vs todos

Publicado por EDWIN (6 intervenciones) el 08/09/2018 14:20:36
Buen día. Estoy desarrollando una página web para campeonatos deportivos...Mi pregunta es: ¿Cómo genero automáticamente partidos todos vs todos sin repetición (no importa el orden).

Si alguien me puede ayudar por favor... se lo agradecería mucho.
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
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Generar partidos todos vs todos

Publicado por Gonzalo (615 intervenciones) el 08/09/2018 16:31:10
ok, no dices si usas bases de datos asi que me imagino que vas a usar un array.

bueno, aqui hay varias soluciones, si alguien tiene una solucion mejor adelante.

necesitas una matriz con 2 indices, el indice cero es para el nombre del equipo, el indice 1 es un logico para saber si ya fue elegido.

y la funcion rand para generar numeros aleatorios.

aqui te dejo una posible solucion, tiene errores asi que ten cuidado:

la lista debe tener un conteo par, si pones una lista impar se bloquea.

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
<?php
 
function Elegir(&$Equipos)
{
	$Equipo="";
 
	while($Equipo=="")
	{
		$Indice=rand(0,count($Equipos)-1);
 
		if($Equipos[$Indice][1]==0)
		{
			$Equipo=$Equipos[$Indice][0];
			$Equipos[$Indice][1]=1;
		}
	}
 
	return $Equipo;
}
 
$Equipos = array
(
	array("Uno",0),
	array("dos",0),
	array("tres",0),
	array("cuatro",0),
	array("cinco",0),
	array("seis",0),
	array("siete",0),
	array("ocho",0),
	array("nueve",0),
	array("diez",0)
	);
 
for($i=0;$i<count($Equipos)/2;$i++)
{
	$Equipo1=Elegir($Equipos);
	$Equipo2=Elegir($Equipos);
 
	echo($Equipo1." ".$Equipo2."<br><br>");
}
 
?>
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 17 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar partidos todos vs todos

Publicado por EDWIN (6 intervenciones) el 08/09/2018 16:58:25
Perdón por pasarlo por alto, pero sí, los equipos son llamados de base de datos.
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
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Generar partidos todos vs todos

Publicado por Gonzalo (615 intervenciones) el 09/09/2018 00:27:55
ok, para el caso de una base de datos es al mismo tiempo facil y complicado.

1 debes saber cuantos registros son.
2 debes declarar un array con la misma dimencion de la base de datos.

y lo unico que debes hacer es actualizar un campo en la base de datos donde se guarde el numero de orden que le corresponde, al final solo pides la tabla ordenada por ese campo y listo, ahi tiene la lista al azar.

esta es solo una idea de como hacerlo, el codigo es casi seguro que tiene errores, asi que revisalo bien.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Orden(&$Lista,$registros)
{
$i=-1;
  while(true)
{
 $i=rand(0,$Registros-1);
if(!isset($Lista[$i])
{
$Lista[$i]=1;
break;
}
}
return $i;
}

(aqui haces toda la rutina para obtener toda la lista de equipos y el conteo de los registros obtenidos);

1
2
3
4
5
6
7
8
9
10
11
$Lista=array();
 
while(!Rs->Eof())
{
$SqlCommand=
update Equipos set
orden='".Orden($Lista,$Rs->TotalRegistros())."'"
where id='".$Rs->("Indice")."'";
$Rs->Update($SqlCommand);
$Rs->Fetch();
}

select
*
from Equipos
order by Orden

y es todo, el primero va contra el segundo, el tercero contra el cuarto, etc etc etc.
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 xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Generar partidos todos vs todos

Publicado por xve (6935 intervenciones) el 08/09/2018 21:24:24
Otra manera, es encadenar dos bucles para tener todos los partidos posibles... seria algo así para que no se repita ningún partido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$equipos=array("EquipoA","EquipoB","EquipoC","EquipoD");
 
// Array utilizado para guardar los partidos para no repetirlos...
$partidos=array();
 
for($i=0;$i<count($equipos);$i++)
{
    for($j=0;$j<count($equipos);$j++)
    {
        if($i!=$j && !in_array($equipos[$j]."-".$equipos[$i],$partidos))
        {
            $partidos[]=$equipos[$i]."-".$equipos[$j];
            echo "<br>Partido entre: ".$equipos[$i]." y ".$equipos[$j];
        }
    }
}

Este código devuelve:
1
2
3
4
5
6
Partido entre: EquipoA y EquipoB
Partido entre: EquipoA y EquipoC
Partido entre: EquipoA y EquipoD
Partido entre: EquipoB y EquipoC
Partido entre: EquipoB y EquipoD
Partido entre: EquipoC y EquipoD
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 17 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar partidos todos vs todos

Publicado por EDWIN (6 intervenciones) el 08/09/2018 21:43:21
Muchas 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