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

    Metodo ottimizzato per definire un livello

    Salve a tutti
    ho una serie di livelli associati a un punteggio numerico intero. Ogni utente è in quel livello fin quando il suo punteggio è entro un minimo e un massimo.
    La situazione attuale è questa:

    $arrLivello = array (10=>"Visitatore",
    25=>"Principiante",
    50=>"Intermedio",
    100=>"Esperto",
    500=>"Professionista")

    if ($punti>0 && $punti<=10)
    echo $arrLivello[10];
    else if (....){
    ....
    }

    Esiste una struttura o una funzione o qualcosa del genere che mi consenta di gestire questa cosa senza usare una lunga serie di if?
    I livelli sono di un numero finito (e definito, nel senso che non aumenteranno) ma possono essere anche una ventina.
    Voi come risolvereste la cosa?
    Grazie a chi mi risponderà!

    [EDIT] Ovviamente la memorizzazione dei livelli può anche non essere fatta in un array, se la soluzione lo richiede.
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    invece di usare il costrutto IF, potresti scorrere $arrLivello ed usare una variabile per tenere traccia della chiave precedente

    Codice PHP:
    $last_ranking=0;
    foreach(
    $arrLivello as $ranking=>$level):
        if(
    $punti>=$last_ranking and $punti<=$ranking):
            echo 
    $level;
            break;
    //esci dal ciclo for
        
    endif;
        
    $last_ranking=$ranking;
    endforeach; 

  3. #3
    interessante soluzione la provo subito!
    Perdonami ma la sintassi che hai usato è pseudocodice o è php 7?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    È php, qualsiasi versione.

  5. #5
    Non avevo mai visto questo formato! Grazie
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  6. #6
    Prego!

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Una domanda.

    C'è una cosa che non capisco. Oltre 500 punti qual'è il livello ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Una domanda.

    C'è una cosa che non capisco. Oltre 500 punti qual'è il livello ?
    Questo dovrebbe dircelo Nunkij, teoricamente potrebbe esserci un limite di punti di 500.

    Nel caso il limite non ci fosse, si potrebbe aggiungere all'array un valore arbitrariamente alto oppure verificare, con un if, che i punti non eccedano 500.

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Un altra possibilità puo' essere questa.

    Codice PHP:
    <?php
    function livello($punti) {
     
    //$arrLivello = array (500=>"Professionista", 100=>"Esperto", 50=>"Intermedio", 25=>"Principiante",0=>"Visitatore");
     
    $arrLivello = array (101=>"Professionista"51=>"Esperto"26=>"Intermedio"11=>"Principiante",0=>"Visitatore"); 
     
     foreach( 
    $arrLivello as $key => $value ) {if ($punti >= $key) return $value;}
    }
    echo 
    livello(8)."<br/>";
    echo 
    livello(24)."<br/>";
    echo 
    livello(50)."<br/>";
    echo 
    livello(88)."<br/>";
    echo 
    livello(120)."<br/>";
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    oppure questa, senza foreach

    Codice PHP:
    function get_level($array_of_levels$user_value) {
        
    /*
            Restituisce il livello dell'utente sulla base del punteggio. 
            Parametri:
                - $array_of_levels = matrice dei livelli possibili (la chiave è il punteggio minimo per accedere al livello)
                - $user_value = punteggio dell'utente
        */

        // ordina l'array dei livelli per chiave (in questo modo non è necessario passare una matrice ordinata)
        
    ksort($array_of_levels);
        
    // estrae le chiavi dell'array dei livelli 
        
    $keys array_keys($array_of_levels);    

        
    // filtra l'array dei livelli sulla chiave
        
    $level array_filter($keys, function($k) use ($user_value) { 
            return 
    $k <= $user_value
        });

        
    // se il livello dell'utente è inferiore al minimo delle chiavi, restituisce il livello minimo
        
    if (empty($level)) {
            return 
    array_pop(array_reverse($array_of_levels));
        }
        
    // restituisce il livello
        
    return $array_of_levels[array_pop($level)];
    };

    $arrLivello = array (   
                            
    100=>"Esperto",
                            
    10=>"Visitatore",
                            
    25=>"Principiante",
                            
    50=>"Intermedio",
                            
    500=>"Professionista",
                            );

    $user_value 102;

    $level get_level($arrLivello$user_value);
    var_dump($level); 

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.