• User

    Trovare specifici elementi in un ciclo for

    Ciao a tutti. Sto tentando di realizzare un sito di fantacalcio e ho fatto uno script php per estrarre i voti dei calciatori da un file(di cui vi posto alcune righe), però vorrei selezionare soltanto degli elementi che corrispondano ad un determinato parametro, per esempio, quelli che hanno $ruolo=3, come posso fare?

    [PHP]<?php
    $voti = file("MCC02.txt");
    $num_voti = count($voti);
    for($num1 = 0 ; $num1 < $num_voti ; $num1++){
    $prova=($voti[$num1]);
    $prova1=$prova;
    $dati=array();
    $dati[]= $prova1;
    $prova4=implode($dati);
    $prova5=explode('|',$prova4);
    $codicegiocatore= $prova5[0];
    $nome=$prova5[2];
    $squadra=$prova5[3];
    $ruolo=$prova[5];
    $vototot=$prova5[7];
    $voto=$prova5[10];
    $goal=$prova5[11];
    $assist=$prova5[15];
    $goalsubiti=$prova5[12];
    $prezzo=$prova5[27];?>[/PHP]

    520|2|"BOGLIACINO Mariano"|"NAPOLI"|1|2|1|5.0|0|1|5.0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|3
    521|2|"BOLZONI Francesco"|"GENOA"|0|2|0|0.0|0|0|0.0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|1
    522|2|"BOMBARDINI Davide"|"BOLOGNA"|1|2|1|5.5|0|1|5.5|0|0|0|0|0|0|0|0|0|0|0|0|1|1|0|1|7
    523|2|"BONANNI Massimo"|"SAMPDORIA"|0|2|0|0.0|0|0|0.0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2
    524|2|"BRESCIANO Mark"|"PALERMO"|1|2|1|6.0|0|1|6.0|0|0|0|0|0|0|0|0|0|0|0|0|1|1|0|1|7
    525|2|"BRIGHI Matteo"|"ROMA"|1|2|0|0.0|0|0|0.0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|12
    526|2|"BROCCHI Christian"|"LAZIO"|1|2|0|0.0|0|0|0.0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|8
    

  • Super User

    Intanto, direi che il codice

    
     $dati=array();
        $dati[]= $prova1;
        $prova4=implode($dati);
        $prova5=explode('|',$prova4);
    
    

    è un pò ridondante, non ne capisco l'utilità. Potresti teoricamente anche cancellarle queste righe.

    Un altro suggerimento, usa il costrutto list per assegnare le variabili. ( se proprio ne hai necessità ). Ad esempio il tuo codice si potrebbe riscrivere:

    
    list(,,$nome,$squadra,,$ruolo,,$vototot,,,$voto,$goal,$goalsubiti,,,$assist) = $prova5;
    
    

    Per maggiori info, guarda nel sito di php.net

    Per fare come dici tu, crea un'array esterno al ciclo,chiamato ad esempio $ruolo3.

    $ruolo3 = array();

    poi nel ciclo, aggiungi a questo array solo i calciatori che soddisfano la condizione $ruolo == 3, usando:

    if($ruolo==3) $ruolo3[] = $prova5;

    PS: con un database sarebbe tutto molto più efficiente, ma avrai avuto le tue ragioni per usare i file 😄


  • User

    In quale stringa del ciclo lo devo aggiungere?


  • Super User

    Dopo che hai definito $prova5


  • User

    Non funziona...perchè??


  • Super User

    posta come è ora il tuo codice


  • User

    Ecco il codice:

    [PHP]<?php
    $voti = file("MCC02.txt");
    $num_voti = count($voti);
    $ruolo3=array();
    for($num1 = 0 ; $num1 < $num_voti ; $num1++){
    $prova=($voti[$num1]);
    $prova1=$prova;
    $dati=array();
    $dati[]= $prova1;
    $prova4=implode($dati);
    $prova5=explode('|',$prova4);
    if($ruolo==3) $ruolo3[] = $prova5;
    $codicegiocatore= $prova5[0];
    $nome=$prova5[2];
    $squadra=$prova5[3];
    $ruolo=$prova[5];
    $vototot=$prova5[7];
    $voto=$prova5[10];
    $goal=$prova5[11];
    $assist=$prova5[15];
    $goalsubiti=$prova5[12];
    $prezzo=$prova5[27];

    }

    echo"$nome";
    ?>
    </table>
    </body>
    </html>[/PHP]

    Grazie per l'aiuto, ma sono ancora alle prime armi con il php..


  • Super User

    Figurati. Il $dati=array(); lo devi uscire dal ciclo, se no ad ogni iterazione lo re-inizializzi!

    Capisci cosa voglio dire? In pratica fai questo:

    1. Crei l'array

    2. Scrivi un valore

    3. Ri-crei l'array ( cancellando quello che c'era prima )

    4. Inserisci un altro valore

    5. Ri-ricrei l'array ( cancellando ancora )
      ...

    Invece uscendo la definizione dell'array risovleresti il problema!


  • User

    Non funziona nemmeno così, mi restituisce il nome solo del primo giocatore, il problema è forse del fatto di questo script non lo so, io im poche parole con la funzione file estraggo dal file ogni riga all'interno di un array, con il ciclo seleziono man mano ogni elemento dell'array e lo inserisco in un altro array, che ritrasformo in una stringa e che poi ritrasformo in un array con la funzione explode, in modo che ad ogni numero corrisponda un valore riguardante il giocatore, per esempio l'ultimo è il prezzo, c'è un modo se strutturato in questo modo per selezionare solo quelli che hanno $ruolo=3?


  • Super User

    Scusami ho detto una cavolata, il dati =array() era giusto dov'era. Ho letto male...

    Prova con questo codice:
    [php]
    <?php
    $voti = file("MCC02.txt");
    $ruolo3=array();
    foreach($voti AS $riga) {
    // Spezzi la riga in un array
    $prova5=explode('|',$riga);

    // Non so a cosa ti servano, comunque nomini delle variabili per l'array
    list($codicegiocatore,,$nome,$squadra,,$ruolo,,$vototot,,,$voto,$goal,$goalsubiti,,,$assist) = $prova5;
    $prezzo=$prova5[27];
    
    // Se il giocatore ha ruolo 3, lo aggiungi nell'altro array
    if($ruolo==3) $ruolo3[] = $prova5;
    

    }

    printr($ruolo3);
    ?>
    [/php]

    Ho cercato di ridurtelo all'osso e di sistemarlo in modo più pulito... Il problema del codice di prima è che facevi il controllo con $ruolo, ancora prima che definessi $ruolo!


  • User

    Grazie.. questo codice sembra funzionare e mi stampa a schermo questo

    Array (     [0] => Array         (             [0] => 101             [1] => 2             [2] => "ABBIATI Christian"             [3] => "MILAN"             [4] => 1             [5] => 0             [6] => 0             [7] => 0.0             [8] => 0             [9] => 0             [10] => 0.0             [11] => 0             [12] => 0             [13] => 0             [14] => 0             [15] => 0             [16] => 0             [17] => 0             [18] => 0             [19] => 0             [20] => 0             [21] => 0             [22] => 0             [23] => 0             [24] => 0             [25] => 0             [26] => 0             [27] => 12          )      [1] => Array         (             [0] => 102             [1] => 2             [2] => "AMELIA Marco"             [3] => "GENOA"             [4] => 1             [5].....
    

    Però poi come faccio selezionare gli elementi che voglio?


  • Super User

    Si, il printr alla fine mostra i contenuti dell'array.

    Se aggiungi un tag html <pre> prima ed un </pre> dopo lo script, lo vedrai ben formattato.

    Quali sarebbero gli elementi che vuoi? Quell'array che ti mostra èl'array $ruolo3, che contiene tutti i giocatori di ruolo 3.


  • User

    Ok ho risolto quel problema, ma ora ho fatto un sistema di selezione con menu, che permette di far uscire per esempio i portieri di una determinata squadra, ecco il codice:
    [PHP]<?php
    $ruolo2=$_POST["Ruolo"];
    $squadra2=$_POST["Squadra"];
    $voti = file("MCC02.txt");
    $ruolo3=array();
    foreach($voti AS $riga) {
    // Spezzi la riga in un array
    $prova5=explode('|',$riga);

    // Non so a cosa ti servano, comunque nomini delle variabili per l'array
    list($codicegiocatore,,$nome,$squadra,,$ruolo,,$vototot,,,$voto,$goal,$goalsubiti,,,$assist) = $prova5;
    $prezzo=$prova5[27];
    
    
    // Se il giocatore ha ruolo 3, lo aggiungi nell'altro array
    $nulla='nulla';
    if($squadra2==$nulla){
    
    
    if($ruolo==$ruolo2) $ruolo3[]=$prova5;
    }
    if($squadra2!=$nulla){if($squadra==$squadra2 and $ruolo==$ruolo2) $ruolo3[]=$prova5;}
    

    }

    $num_cal=count($ruolo3);
    echo"$num_cal";
    for($num1=0;$num1 < $num_cal;$num1++){
    $nome=$ruolo3[$num1][2];
    $nome=str_replace('"','',$nome);
    $squadra=$ruolo3[$num1][3];
    $squadra=str_replace('"','',$squadra);
    echo"<tr>";
    echo"<td>$nome</td>";
    echo"<td>$squadra</td>";
    echo"</tr>";

     }
     ?>
     [/PHP]
    

    Se non seleziono la squadra e quindi $squadra2=='nulla' mi esce la lista invece se è diverso e quindi seleziono una squadra non mi appra nessun giocatore, come mai??

    P.S.:grazie ancora per l'aiuto..


  • Super User

    Potresti ottimizzare le cose raggruppando le condizioni:

    [php]
    // Se il giocatore ha ruolo 3, lo aggiungi nell'altro array
    if( ($squadra2=='nulla' OR $squadra2==$squadra) AND $ruolo==$ruolo2)
    $ruolo3[]=$prova5;
    [/php]

    Vedi se così risolve, non ho controllato se ci fossero altri errori logici nel tuo codice. Altrimenti, prova a fare un bel:

    [php]echo "Hai scritto $squadra2 mentre questo giocatore è della squadra $squadra";[/php]

    E mettilo subito dopo il list() all'interno del ciclo! Così puoi "debuggare" un pò la situazione!


  • User

    Continua a non funzionare, purtroppo.. Ora sto provando ad inserire tutti i giocatori in un database mysql, in modo da fare una ricerca da lì
    lo sto facendo con un ciclio for però non va la query all'interno del ciclo mentre fuori funziona, ecco:[PHP]<?php
    $connessione=mysql_connect("localhost","root","");
    $selezione=mysql_select_db("prova",$connessione);
    if($selezione==1){echo"sele ok";}
    $voti = file("MCC02.txt");
    $num_voti = count($voti);
    echo"$num_voti";
    for($num1 = 0 ; $num1 < $num_voti ; $num1++){
    $prova=($voti[$num1]);
    $prova1=$prova;
    $dati=array();
    $dati[]= $prova1;
    $prova4=implode($dati);
    $prova5=explode('|',$prova4);
    $prova5=str_replace('"','',$prova5);
    $codicegiocatore= $prova5[0];
    $nome=$prova5[2];
    $squadra=$prova5[3];
    $ruolo=$prova[5];
    $vototot=$prova5[7];
    $voto=$prova5[10];
    $goal=$prova5[11];
    $assist=$prova5[15];
    $goalsubiti=$prova5[12];
    $prezzo=$prova5[27];}
    $query=mysql_query("INSERT INTO giocatori (Nome,Squadra,Ruolo) VALUES('$nome','$squadra','$ruolo')");
    ?>
    [/PHP]


  • User

    Ho risolto questo problema, ma ora non so come fare delle ricerche all'interno della tabella, come si fa?


  • Super User

    Devi usare le SELECT


  • User

    ok, come posso dire di creare una tabella mysql che deve massimo 23 record?


  • Super User

    LIMIT

    ( guarda nel sito officiale di mysql )


  • User

    Ok grazie mille, ora devo cercare di creare un menù da dove poter comprare dei giocatori, come faccio a trasformare ciò che c'è scritto in una cella di una tabella html in uan variabile utilizzabile in php?