Foros del Web » Programando para Internet » PHP »

Mostrar distintos elementos de un array

Estas en el tema de Mostrar distintos elementos de un array en el foro de PHP en Foros del Web. Hola ya no se como resolver esto.. estoy locooo... Se trata se un sistema de torneo de fútbol , en donde se ingresan los equipos ...
  #1 (permalink)  
Antiguo 19/02/2011, 15:17
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Mostrar distintos elementos de un array

Hola ya no se como resolver esto.. estoy locooo...

Se trata se un sistema de torneo de fútbol , en donde se ingresan los equipos y automáticamente el sistema calcula la cantidad de partidos (todos contra todos).
Ejemplo:

Si tengo 6 equipos los partidos serán los siguientes:
TODOS CONTRA TODOS

Equipo 1 - Equipo 2
Equipo 1 - Equipo 3
Equipo 1 - Equipo 4
Equipo 1 - Equipo 5
Equipo 1 - Equipo 6
Equipo 2 - Equipo 3
Equipo 2 - Equipo 4
Equipo 2 - Equipo 5
Equipo 2 - Equipo 6
Equipo 3 - Equipo 4
Equipo 3 - Equipo 5
Equipo 3 - Equipo 6
Equipo 4 - Equipo 5
Equipo 4 - Equipo 6
Equipo 5 - Equipo 6



Un total de 15 partidos, que a su vez se dividen en 5 fechas, en cada fecha deben jugar todos los equipos solo una vez (esto es para que no se cansen los jugadores). Y por cada fecha se juegan solo 3 partidos
Hasta acá todo bien ya hice la parte de programación que calcula todo esto.

El problema viene cuando quiero asignarle a cada fecha los partidos correspondientes, sin repetir equipos ni partidos, es decir si el Equipo 1 juega contra el Equipo 2 en la primera fecha, no volverá a jugar en las siguientes fechas.


Entonces por ejemplo en la primera fecha juegan:
Equipo 1 - Equipo 2
Equipo 3 - Equipo 4
Equipo 5 - Equipo 6

Perfecto, no se repite ningún equipo y ningún partido.

en la segunda fecha podría ser

Equipo 1 - Equipo 6
Equipo 2 - Equipo 4
Equipo 5 - Equipo 3

Perfecto, no se repite ningún equipo, y no se repite ningún partido que se halla jugado en la primera fecha

Como hago para mostrar esto dinamicamente, independientemente de la cantidad de equipos que se ingresen al principio ?????

Tengo en un array guardados todos los partidos en este caso son 15

Código PHP:
Ver original
  1. $todos_los_partidos=array(
  2. 'Equipo 1 - Equipo 2',
  3. 'Equipo 1 - Equipo 3',
  4. 'Equipo 1 - Equipo 4',
  5. 'Equipo 1 - Equipo 5',
  6. 'Equipo 1 - Equipo 6',
  7. 'Equipo 2 - Equipo 3',
  8. 'Equipo 2 - Equipo 4',
  9. 'Equipo 2 - Equipo 5',
  10. 'Equipo 2 - Equipo 6',
  11. 'Equipo 3 - Equipo 4',
  12. 'Equipo 3 - Equipo 5',
  13. 'Equipo 3 - Equipo 6',
  14. 'Equipo 4 - Equipo 5',
  15. 'Equipo 4 - Equipo 6',
  16. 'Equipo 5 - Equipo 6'
  17. );

Si alguien me puede ayudar se lo agradeceré
__________________
la la la
  #2 (permalink)  
Antiguo 19/02/2011, 15:26
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 8 meses
Puntos: 416
Respuesta: Mostrar distintos elementos de un array

¿Ese es el array que te devuelve lo que creaste o asi lo tienes estaticamente?
  #3 (permalink)  
Antiguo 19/02/2011, 15:29
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Mostrar distintos elementos de un array

Cita:
Iniciado por Ronruby Ver Mensaje
¿Ese es el array que te devuelve lo que creaste o asi lo tienes estaticamente?
el array se crea dinamicamente, dependiendo de la cantidad de equipos que se ingresen al principio
__________________
la la la
  #4 (permalink)  
Antiguo 20/02/2011, 11:13
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Mostrar distintos elementos de un array

Alguien podría ayudarme?
no encuentro la solución

Gracias.



.
__________________
la la la
  #5 (permalink)  
Antiguo 20/02/2011, 11:42
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Mostrar distintos elementos de un array

El array ya lo generaste ? es tal cual como mostraste ?

Lo podes imprimir con foreach o while y ponerle de condición que solo muestre 4 y que incremente en 4.

Saludos
  #6 (permalink)  
Antiguo 20/02/2011, 12:25
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Mostrar distintos elementos de un array

Cita:
Iniciado por marcofbb Ver Mensaje
El array ya lo generaste ? es tal cual como mostraste ?

Lo podes imprimir con foreach o while y ponerle de condición que solo muestre 4 y que incremente en 4.

Saludos
Pro que 4 ?? no entiendo


.
__________________
la la la
  #7 (permalink)  
Antiguo 20/02/2011, 12:36
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Mostrar distintos elementos de un array

Tenes razon lei mal el codigo,

Pero vas a tener que organizar el array para que con una operación matemática puedas sacar la fecha que juega cada equipo y no juegue 1 equipo 2 veces en la misma fecha.
  #8 (permalink)  
Antiguo 20/02/2011, 17:49
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 1 mes
Puntos: 177
Respuesta: Mostrar distintos elementos de un array

ENCONTRÉ ESTE CÓDIGO Y ME SIRVIÓ
LO PONGO POR SI A ALGUIEN LE SIRVE


Código PHP:
<?php
/* 
 * This code owes an enormous debt to 
 * http://www.barrychessclub.org.uk/berger2001.htm 
 */

function main() {
    
?>
    <style>
    input, textarea { display: block; margin-bottom: 1em; }
    label { font-weight: bold; display: block; }
    </style>
    <h1>Fixtures Generator</h1>
    <p>This page is part of <a
    href="http://bluebones.net/2005/05/league-fixtures-generator/">bluebones.net</a>.</p>
    <?php
    
// Find out how many teams we want fixtures for.
    
if (! isset($_GET['teams']) && ! isset($_GET['names'])) {
        print 
get_form(); 
    } else {
        
# XXX check for int
        
print show_fixtures(isset($_GET['teams']) ?  nums(intval($_GET['teams'])) : explode("\n"trim($_GET['names'])));
    }
}

function 
nums($n) {
    
$ns = array();
    for (
$i 1$i <= $n$i++) {
        
$ns[] = $i;
    }
    return 
$ns;
}

function 
show_fixtures($names) { 
    
$teams sizeof($names);

    print 
"<p>Fixtures for $teams teams.</p>";

    
// If odd number of teams add a "ghost".
    
$ghost false;
    if (
$teams &#37; 2 == 1) {
        
$teams++;
        
$ghost true;
    }
    
    
// Generate the fixtures using the cyclic algorithm.
    
$totalRounds $teams 1;
    
$matchesPerRound $teams 2;
    
$rounds = array();
    for (
$i 0$i $totalRounds$i++) {
        
$rounds[$i] = array();
    }
   
    for (
$round 0$round $totalRounds$round++) {
        for (
$match 0$match $matchesPerRound$match++) {
            
$home = ($round $match) % ($teams 1);
            
$away = ($teams $match $round) % ($teams 1);
            
// Last team stays in the same place while the others
            // rotate around it.
            
if ($match == 0) {
                
$away $teams 1;
            }
            
$rounds[$round][$match] = team_name($home 1$names
                . 
" v " team_name($away 1$names);
        }
    }

    
// Interleave so that home and away games are fairly evenly dispersed.
    
$interleaved = array();
    for (
$i 0$i $totalRounds$i++) {
        
$interleaved[$i] = array();
    }
    
    
$evn 0;
    
$odd = ($teams 2);
    for (
$i 0$i sizeof($rounds); $i++) {
        if (
$i == 0) {
            
$interleaved[$i] = $rounds[$evn++];
        } else {
            
$interleaved[$i] = $rounds[$odd++];
        }
    }

    
$rounds $interleaved;

    
// Last team can't be away for every game so flip them
    // to home on odd rounds.
    
for ($round 0$round sizeof($rounds); $round++) {
        if (
$round == 1) {
            
$rounds[$round][0] = flip($rounds[$round][0]);
        }
    }
    
    
// Display the fixtures        
    
for ($i 0$i sizeof($rounds); $i++) {
        print 
"<p>Round " . ($i 1) . "</p>\n";
        foreach (
$rounds[$i] as $r) {
            print 
$r "<br />"
        }
        print 
"<br />";
    }
    print 
"<p>Second half is mirror of first half</p>";
    
$round_counter sizeof($rounds) + 1;
    for (
$i sizeof($rounds) - 1$i >= 0$i--) {
        print 
"<p>Round " $round_counter "</p>\n";
        
$round_counter += 1;
        foreach (
$rounds[$i] as $r) {
            print 
flip($r) . "<br />";
        }
        print 
"<br />";
    }
    print 
"<br />";

    if (
$ghost) {
        print 
"Matches against team " $teams " are byes.";
    }
}

function 
flip($match) {
    
$components split(' v '$match);
    return 
$components[1] . " v " $components[0];
}

function 
team_name($num$names) {
    
$i $num 1;
    if (
sizeof($names) > $i && strlen(trim($names[$i])) > 0) {
        return 
trim($names[$i]);
    } else {
        return 
$num;
    }
}

function 
get_form() {
    
$s '';
    
$s '<p>Enter number of teams OR team names</p>' "\n";
    
$s .= '<form action="' $_SERVER['SCRIPT_NAME'] . '">' "\n";
    
$s .= '<label for="teams">Number of Teams</label><input type="text" name="teams" />' "\n";
    
$s .= '<input type="submit" value="Generate Fixtures" />' "\n";
    
$s .= '</form>' "\n";

    
$s .= '<form action="' $_SERVER['SCRIPT_NAME'] . '">' "\n";
    
$s .= '<div><strong>OR</strong></div>' "\n";
    
$s .= '<label for="names">Names of Teams (one per line)</label>'
        
'<textarea name="names" rows="8" cols="40"></textarea>' "\n";
    
$s .= '<input type="submit" value="Generate Fixtures" />' "\n";
    
$s .= "</form>\n";
    return 
$s;
}

main();

?>
SALUDOS


.
__________________
la la la

Etiquetas: distintos, elementos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:53.