Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema con cicli random automatici

    Ho realizzato uno script per creare in automatico le combinazioni per una gara sportiva, ma quando vado ad avviarlo non sempre crea tutte le combinazioni e così non riesco a completare gli abbinamenti per le partite. Mi potete dare una mano?
    Posto qui il codice:


    $squadre = array( 'A', 'B', 'C', 'D', 'E', 'F', 'G');

    //$squadre = array( 'A', 'B', 'C', 'D', 'E', 'F');
    $n_squadre = count($squadre); # numero delle squadre

    $ctrl = ceil($n_squadre /2) - floor($n_squadre /2);
    if ($ctrl > 0) {
    $n_giornate = $n_squadre; # numero giornate del girone
    $squadre[] = " ";
    } else {
    $n_giornate = $n_squadre -1; # numero giornate del girone
    }
    $partite_g = floor($n_squadre /2); # numero partite del girone

    #----------------------------------#
    # Ciclo che genera le combinazioni #
    #----------------------------------#

    for ($i = $n_squadre; $i>0; $i--)
    {
    // debug
    //print_r($squadre);

    # registra il primo elemento dell'array $squadre nell'array $current
    # e lo elimina dall'array $squadre
    $current = array_shift($squadre);

    # $tmp tiene conto del decremento di squadre a ogni giro del ciclo
    $tmp = count($squadre);

    # ciclo che associa a ogni elemento n dell'array $squadre
    # ai restanti (n-1) elementi
    for ($j=0; $j< $tmp; $j++)
    {
    //echo ($x+1).") $current[0] - $squadre[$j]
    \n";

    $partite[$x] = array( casa => $current[0] , fuori =>
    $squadre[$j]);

    $x++;
    }

    }

    ## Fine ciclo ##


    # creo un array vuoto per il controllo delle combinazioni valide
    $lista = array();

    # rendo casuale l'ordine degli elementi di $partite
    //shuffle($partite);

    $x=0;

    #-----------------------------------------------#
    # Serie di cicli che associano una combinazione #
    # di squadre a ogni partita del torneo #
    #-----------------------------------------------#

    for ($g=1; $g <= $n_giornate; $g++)
    {
    for ($i=0; $i < $partite_g; $i++)
    {
    $count = count($partite);
    shuffle($partite);
    //sort($partite);

    for ($x=0; $x < $count ; $x++)
    {
    # se nessuno dei due elementi della combinazione $x
    # è presente nell'array $lista la combinazione è valida
    if ( !in_array($partite[$x][casa] , $lista) && !in_array($partite[$x][fuori], $lista)
    )
    {
    # la combinazione viene assegnata all'array $giornata
    $giornata[$g][$i][casa] = $partite[$x][casa];
    $giornata[$g][$i][fuori] = $partite[$x][fuori];

    # in caso di assegnazione la variabile $i viene incrementata
    $i++;

    #la combinazione valida viene inserita nella lista di controllo
    array_push($lista, $partite[$x][casa], $partite[$x][fuori]);

    // elimino la combinazione valida dall'array partite
    unset($partite[$x]);
    } # END if

    } # END for ($x)

    } # END for ($i)
    unset($lista); # distrugge l'array $lista alla fine di ogni giornata
    $lista = array(); # e lo ricrea per il prossimo giro del ciclo
    //$i=1;

    } # END for ($g)

    // debug
    // print_r($lista);

  2. #2
    Nessuno che mi sappia aiutare? A me serve solo sapere come evitare che un ciclo salti dei dati. Vi prego è importante.

  3. #3
    Aiuto vi prego, mi sto scervellando da giorni senza trovare rimedio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.