PHPBBIntegrare PHPBB PHPFunzioni PHP CFunzioni C EcologiaLa mia ecologia   Chi siamoChi è Senamion HomeHome page corner Il Web e l'ecologia

Senamion


Chi siamo:

Il web e l'ecologia, condividere il web e un momento di riflessione sullo stato dell'ecologia e sul suo futuro

Google

[PHP] Un ciclo al posto di tanti if

30 Ottobre 2006 by Giovanni | Argomenti: , , | 6510

Vedo spesso codice PHP con una serie di if annidati da fare spavento, dove, alla fine dei conti, si ripete un test su una variabile dove i valori di confronto però cambiano.
La soluzione, quando il numero di if aumenta parecchio, è quella di creare un array di valori e di usare quelli come elementi di confronto in modo tale da confinare tutti i valori di confronto all’interno di un array e l’elaborazione vera e propria successivamente.

Ecco allora un esempio esemplificativo:

<? $arrayRange = array( array(0, 100, "Primo range"), array(101, 10000, "Secondo range"), array(10001, 10002, "Terzo range"), array(10003, 99999, "Ultimo range") ); // QUESTO E' IL VALORE DA CONFRONTARE (qui e' possibile mettere valori per il test) $valConfronto = 10001; foreach ($arrayRange AS $myRange) { list($valI, $valF, $valEcho) = $myRange; if ($valConfronto >= $valI && $valConfronto <= $valF) { echo $valEcho; break; } } ?>

Questo esempio sostituisce un codice simile al seguente:

<? // QUESTO E' IL VALORE DA CONFRONTARE (qui e' possibile mettere valori per il test) $valConfronto = 10001; if ($valConfronto >= 0 && $valConfronto <= 100) { echo "Primo Range"; } elseif ($valConfronto >= 101 && $valConfronto <= 10000) { echo "Secondo Range"; } elseif ($valConfronto >= 10001 && $valConfronto <= 10002) { echo "Terzo Range"; } elseif ($valConfronto >= 10003 && $valConfronto <= 99999) { echo "Ultimo Range"; } ?>

Con solo 4 range il codice è paragonabile in termini di lunghezza, ma provate a pensare a una serie di confronti nell’ordine di qualche decina e vi risulterà lampante la pulizia del codice della prima soluzione.
Infine occorre notare che il contenuto dell’array può tranquillamente essere il risultato dinamico di una query da database, operazione non possibile nel secondo caso.

Pubblicato in Funzioni e classi PHP e C |

5 Commenti a “[PHP] Un ciclo al posto di tanti if”

  1. Augusto Murri scrive:

    Sicuramente un’alternativa ma come soluzione la seconda è molto più performante e chiara per un serie di motivi, nella prima rispetto alla seconda:

    1- viene istanziato un array
    2- ad ogni ciclio foreach viene eseguito un count()
    3- le if totali saranno le stesse delle seconda
    4- il listing nel foreach a questo punto è inutile se proprio vuoi risparmiare di scrivere codice

  2. peppe scrive:

    ciao, voglio fare il massimo e la media di un array. ho un array di 4 elementi. voglio fare il massimo solo tra i numeri

  3. peppe scrive:

    ciao, voglio fare il massimo e la media di un array di 4 elementi. voglio però il massimo e la media solo tra i numeri minori di un certo valore limite (ex 66666) e nn di tutti. aspetto una risp. ciao

  4. Giovanni scrive:

    Un programma già pronto non sarebbe “corretto”, ti do’ qualche dritta.
    setti una variabile max = 0;
    setti una variabile somma = 0;
    setti una variabile elementi = 0;
    Cicli sugli elementi
    - se l’elemento è minore di 66666 allora:
    . sommi l’elemento a somma
    . sommi 1 a elementi
    . se l’elemento è maggiore di max setti max = elemento;

    Alla fine la media è la somma - il numero di elementi

  5. peppe scrive:

    questo vale anche per elementi presi da un database? nel mio caso ho: $row[primo]…$row[quattro], quindi come faccio a prendere un elemento alla volta? conviene compattargli in un unico array o non ci sono problemi se tratto il tutto come quattro numeri diversi? cmq grazie per la dritta che sicuramente sarà ottima!. Ciao

Scrivi un commento