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

    Ordinare foreach secondo il contenuto di un file

    Spiego il mio problema:
    Ho realizzato una classifica in php in cui si può aggiungere e togliere un partecipante, il tutto costruito molto semplicemente, per ogni utente viene creato il file, e dentro il file c'è il loro punteggio.
    Il problema è questo:
    I file vengono catalogati in ordine alfabetico, e di conseguenza i nomi vengono visualizzati in ordine alfabetico, mentre io voglio visualizzarli in ordine di punteggio.
    Lo sò, è molto complicato.
    Ecco l'output: http://images-habbolife.netsons.org/crisss/classifica/
    Ed ecco il codice:
    Codice PHP:
    <?php
    if($_GET['newuser'] == 'ok'){
    fwrite(fopen('database/classifica/'.$_GET['newname'].'.txt''a'), '0');

    }
    if((
    $_GET['newuser'] == 'ok')||(!($_GET['remove'] == ''))){
    echo 
    "<meta http-equiv=\"refresh\" content=\"0; url='http://habboeclipse.altervista.org/crisss/new/classifica.php'\">";
    }
    ?>
    <form method="GET">
    <input type="text" name="newname" />
    <input type="hidden" name="newuser" value="ok" />
    <input type="submit" />
    </form>
    <table border="1">
    <tr style="background: #18b2c9"><td>[b]<font color="red">[i]Nome Habbo[/i][/b][i]</font>[/i]</td><td>[b]<font color="red">[i]Punti[/i][/b][i]</font>[/i]</td><td>[b]<font color="red">[i]Azioni[/i][/b][i]</font>[/i]</td></tr>
    <?php
    $filename 
    'database/classifica';
    foreach (
    glob($filename."/*.txt") as $filename) {
        echo 
    "<tr>";
        
    $filename str_replace(".txt"""$filename);
        
    $filename str_replace("database/classifica/"""$filename);
    if(
    $_GET['add'] == $filename){
            
    $contenutoa fread(fopen("database/classifica/".$filename.".txt","r"), filesize("database/classifica/".$filename.".txt"));
            
    unlink("database/classifica/".$filename.".txt");
            
    fwrite(fopen("database/classifica/".$filename.".txt","a"), $contenutoa+1);
            
            }
    if(
    $_GET['meno'] == $filename){
            
    $contenutoe fread(fopen("database/classifica/".$filename.".txt","r"), filesize("database/classifica/".$filename.".txt"));
            
    unlink("database/classifica/".$filename.".txt");
            
    fwrite(fopen("database/classifica/".$filename.".txt","a"), $contenutoe-1);
            }
            
    $kk fread(fopen("database/classifica/".$filename.".txt","r"), filesize("database/classifica/".$filename.".txt"));

        echo 
    "<td>".$filename."</td><td>".$kk."</td><td>[url='?add=".$filename."']<img src=\"piu.png\" />[/url] [url='?meno=".$filename."']<img src=\"meno.png\" />[/url] [url='?remove=".$filename."']Rimuovi Partecipante[/url]        </td>";
            
    unlink("database/classifica/".$_GET['remove'].".txt");
    echo 
    "</tr>";
    }

    ?>
    </table>
    E' possibile catalogare i partecipanti della classifica in ordine di punteggio?
    Se sì come?
    Se ci sono errori di grammatica o non capite qualcosa compatitemi, sono le 3 di notte e il cervello non gira bene xD

  2. #2
    Anche io utilizzavo AV e senza mysql me la son vista nera i primi tempi... oggi ti dico fin da subito che ciò che vuoi fare è un gran bel casino...

    cmq ci son passato prima di te... e quindi sò...

    Provalo... ma nn son sicurissimo che funzioni (ma se funziona ti dico che per fare sta cosa ci misi una vita!!)

    Codice PHP:
    <?php 
    if($_GET['newuser'] == 'ok'){ 
    fwrite(fopen('database/classifica/'.$_GET['newname'].'.txt''a'), '0'); 


    if((
    $_GET['newuser'] == 'ok')||(!($_GET['remove'] == ''))){ 
    echo 
    "<meta http-equiv=\"refresh\" content=\"0; url='http://habboeclipse.altervista.org/crisss/new/classifica.php'\">"

    ?> 
    <form method="GET"> 
    <input type="text" name="newname" /> 
    <input type="hidden" name="newuser" value="ok" /> 
    <input type="submit" /> 
    </form> 
    <table border="1"> 
    <tr style="background: #18b2c9"><td>[b]<font color="red">[i]Nome Habbo[/i][/b][i]</font>[/i]</td><td>[b]<font color="red">[i]Punti[/i][/b][i]</font>[/i]</td><td>[b]<font color="red">[i]Azioni[/i][/b][i]</font>[/i]</td></tr> 
    <?php 
    $filename 
    'database/classifica'
    $data=array();
    foreach (
    glob($filename."/*.txt") as $filename) {  
        
    $filename str_replace(".txt"""$filename); 
        
    $filename str_replace("database/classifica/"""$filename); 
    if(
    $_GET['add'] == $filename){ 
            
    $contenutoa fread(fopen("database/classifica/".$filename.".txt","r"), filesize("database/classifica/".$filename.".txt")); 
            
    unlink("database/classifica/".$filename.".txt"); 
            
    fwrite(fopen("database/classifica/".$filename.".txt","a"), $contenutoa+1); 
             
            } 
    if(
    $_GET['meno'] == $filename){ 
            
    $contenutoe fread(fopen("database/classifica/".$filename.".txt","r"), filesize("database/classifica/".$filename.".txt")); 
            
    unlink("database/classifica/".$filename.".txt"); 
            
    fwrite(fopen("database/classifica/".$filename.".txt","a"), $contenutoe-1); 
            } 
            
    $kk fread(fopen("database/classifica/".$filename.".txt","r"), filesize("database/classifica/".$filename.".txt")); 

             
            
    $data[]=array('filename'=>$filename'kk'=>$kk);
    unlink("database/classifica/".$_GET['remove'].".txt");  


    $filename = array();
    $kk = array();

    foreach(
    $data as $k=>$v){
        
    $filename[$k] = $v['filename'];
        
    $kk[$k] = $v['kk'];
    }

    array_multisort($filename,SORT_DESC,SORT_STRING$kk,SORT_DESC,SORT_STRING$data);

    foreach(
    $data as $key => $valore)
        {
        echo 
    "<tr>";
        echo 
    "<td>".$valore['filename']."</td><td>".$valore['kk']."</td><td>[url='?add=".$valore[']<img src=\"piu.png\" />[/url] [url='?meno=".$valore[']<img src=\"meno.png\" />[/url] [url='?remove=".$valore[']Rimuovi Partecipante[/url]</td>";
        echo "</tr>";
        }

    ?> 
    </table>

  3. #3
    ho sbagliato... fai così

    array_multisort($kk,SORT_DESC,SORT_STRING, $filename,SORT_DESC,SORT_STRING, $data);

  4. #4
    Perfetto non ho capito cosa tu abbia scritto, ma funziona.
    Se non dò fastidio, puoi spiegarmi gentilmente qual'è la funzione dei codici che hai aggiunto?
    Cioè:
    array_multisort($kk,SORT_DESC,SORT_STRING, $filename,SORT_DESC,SORT_STRING, $data);

    e

    foreach($data as $k=>$v){
    $filename[$k] = $v['filename'];
    $kk[$k] = $v['kk'];
    }

    Così magari se una prossima volta ho bisogno di fare la stessa cosa, non dovrò chiedere in questo forum.

    Grazie mille comunque

  5. #5
    STEP 1
    Nello script originale che hai postato il ciclo foreach che tu utilizzavi per la stampa a video con echo

    Con la mia modifica quello stesso script è stato utilizzato per costruire un array bidimensionale che ho chiamato $data.

    Quindi $data è articolato così

    $data=array(
    array('filename'=> 'nome_utente', 'kk'=>'punteggio')
    array('filename'=> 'nome_utente2', 'kk'=>'punteggio2')
    array('filename'=> 'nome_utente3', 'kk'=>'punteggio3')
    );

    all'interno dell'array $data ci saranno tanti array quanti sono gli utenti.

    STEP 2

    "smontando" l'array $data appena creato faccio due array
    $filename = array();
    $kk = array();

    e li vado a riempire con il ciclo foreach stando attendo a non la stessa chiave agli elementi ($k):

    foreach($data as $k=>$v){
    $filename[$k] = $v['filename'];
    $kk[$k] = $v['kk'];
    }

    STEP 3

    A questo punto è possibile applicare la funzione array_multisort(): la quale serve ad ordinare più array insieme o un array multidimensionale, rispetto a una o più delle sue dimensioni (è complicatissima e non sò manco io spiegartela bene... se arriva un GURU DEL FORUM mi piacerebbe leggerlo anche a me).

    cmq per info vai http://www.matriz.it/tutorials/6-php..._array_in_php/

  6. #6
    Perfetto! Grazie mille sei fantastico

  7. #7
    Non sò se chiedo troppo, ma c'è un piccolo problemino: viene presa in considerazione solo la prima cifra del numero, quindi secondo il tuo codice viene catalogato primo chi ha come punteggio 9 anziché chi ha ad esempio 11 (dato che 9 è maggiore di 1).
    Non so se è difficile, ma si può risolvere?
    Scusa se chiedo troppo o ti sto stressando con le mie richieste .-.

  8. #8
    prova a sostituire così...

    array_multisort($kk,SORT_DESC,SORT_NUMERIC, $filename,SORT_DESC,SORT_STRING, $data);

  9. #9
    Grazie mille fantastico!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.