Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    90

    switch con più variabili si può fare?

    Salve a tutti,
    di solito la struttura dello switch è in questo modo:

    Codice PHP:
    switch(mia_variabile)  {
    case 
    1:
    echo 
    "Pippo";
    break;
    resto del codice... 
    invece a me servirebbe fare un'analisi di sei variabili diverse e quindi approntare un codice di questo genere:

    Codice PHP:
    switch(mia_variabile1mia_variabile2mia_variabile3 ecc.)  {
    case 
    1:
    echo 
    "Pippo";
    break;
    resto del codice... 
    si può fare oppure è una follia? In pratica io devo analizzare sei variabili numeriche inviate dall'utente è devo dire: "se una di queste sei variabili è == 18 allora una delle rimanenti cinque, deve essere == 9, mentre le altre quattro devono essere compresa fra 10 e 17 per un totale di 76 totali, se una di queste regole viene trasgredita all'ora non registrare...

    Ora, a me stanno venendo in mente tutte le metodologie più contorte del mondo per fare questo, qualcuno potrebbe suggerirmi un metodo snello ed efficace per avere lo stesso risultato?

    Ringrazio tutti quelli che fin da ora vorranno darmi una mano
    Seo Master alle prime keywords!

  2. #2
    Io farei cosi':
    Codice PHP:
    $var1 18;
    $var2 9;
    $var3 11;
    $var4 13;
    $var5 14;
    $var6 11;

    $values = array($var1$var2$var3$var4$var5$var6);

    // prima controlla la somma totale
    if ( array_sum($values) != 76 )
        die(
    'somma non corretta');

    sort($valuesSORT_NUMERIC);

    // controlla che i due valori piu' esterni siano 9 e 18
    if ( $values[0] != OR $values[5] != 18 )
        die(
    'estremi non corretti');

    // scorri gli altri valori e controlla che siano
    // compresi tra 10 e 17
    for ( $x 1$x <= 4$x++ ) {
        if ( !(
    $values[$x] >= 10 AND $values[$x] <= 17) )
            die(
    'valore non compreso tra 10 e 17');
    }

    echo 
    "test ok"

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Lo switch multiplo non è possibile, e non so nemmeno quanto ti aiuterebbe, in questo caso.

    Diciamo che hai messo le variabili in un array, da $a[0] ad $a[5]

    Codice PHP:
    $v18 false;
    $v9 false;
    $v1017 true;
    $totale 0;
    foreach (
    $a as $var) {
        
    $totale += $var;
        if (
    $var == 18$v18 true;
        elseif (
    $var == 9$v9 true;
        elseif (
    $var 10 || $var 17$v1017 false

    A questo punto puoi controllare che $totale sia 76, e che le altre tre variabili siano true.
    Sempre che abbia capito bene le condizioni

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Anche l'altra soluzione non è male... un po' più ragionata, pure

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    90
    Dovrò controllare tutte quante perché non è detto che per forza gli estremi vagano l'uno la metà dell'altro 18 e 9, ma sì, mi sembra un'ottima soluzione
    Seo Master alle prime keywords!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Il modo per concatenare condizioni diverse più o meno fantasiose è
    l'else if

    Codice PHP:

    if (condizione1) {

    } else if (
    condizione2) {

    } else if (
    condizione3) {

    } else {



    l'ultimo else è come il default dello switch

  7. #7
    Originariamente inviato da Ranius
    Dovrò controllare tutte quante perché non è detto che per forza gli estremi vagano l'uno la metà dell'altro 18 e 9, ma sì, mi sembra un'ottima soluzione
    Ciao,
    usa in_array e il codice di k.b

    Codice PHP:
    if(in_array(18,$values)) {
        if(!
    in_array(9,$values)) {
             die(
    "non valido");
        }
    }else {
         echo 
    "warning: 18 non trovato. Che devo fare?";

    Ovviamente questo caso fa "esattamente" quello che chiedi. Cioé SE c'è 18 deve esserci 9. Ma non dici esplicitamente che 18 deve obbligatoriamente esserci =)
    In quel caso puoi raggruppare i due
    Codice PHP:
    if(!in_array(18,$values) || !in_array(9,$values)) die("non valido"); 

  8. #8
    Originariamente inviato da Ranius
    Dovrò controllare tutte quante perché non è detto che per forza gli estremi vagano l'uno la metà dell'altro 18 e 9, ma sì, mi sembra un'ottima soluzione
    Il mio codice non richiede affatto che uno sia la meta' dell'altro.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    90
    Originariamente inviato da k.b
    Il mio codice non richiede affatto che uno sia la meta' dell'altro.
    hai perfettamente ragione, ho scritto male io, era per intendere il 18 e il 9 dove il primo numero è esattamente il doppio del secondo tutto qui, perfetto adesso mi metto a provare tutto quanto è dopo vi dirò il tutto si funziona
    Seo Master alle prime keywords!

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    90
    Salve ragazzi, vi chiedo scusa fin da ora visto che riprende questa discussione vecchia come ma purtroppo ho avuto un po' di problemi nella vita privata che mi hanno mantenuto lontano dalla programmazione...

    Codice PHP:
    if(empty($_POST['creatore']) || empty($_POST['login']) || empty($_POST['ETAPG']) || empty($_POST['sesso']) || empty($_POST['AppPol']) || empty($_POST['classe'])
      || empty(
    $_POST['forza']) || empty($_POST['destrezza']) || empty($_POST['vigore']) || empty($_POST['intelligenza']) || empty($_POST['spirito']) || 
      empty(
    $_POST['presenza'])) {
        echo 
    "per favore riempi tutti i campi, ricorda che si può avere un solo personaggio della stessa appartenenza politica!";
        }
        elseif(!
    is_numeric($_POST['ETAPG']) || !($_POST['ETAPG']>=18)) {
                echo 
    "\"Età\" deve essere un numero e deve essere uguale o maggiore a 18";
                }
                elseif(
    array_sum($totalval) != 76) {
                echo 
    "la somma delle caratteristiche deve essere identica a 76!";
                }
                elseif(
    in_array(18,$totalval) || !in_array(9,$totalval)) {
                echo 
    "se all'interno delle statistiche viene inserito un 18 bisogna inserire obbligatoriamente un 9";
                }
                for(
    $x 1$x <= 4$x++) {
                if(!(
    $totalval[$x] >= 10 AND $totalval[$x] <= 17)) {
                echo 
    "valore non compreso tra 10 e 17";
            }
            }
            else{
            require_once(
    "regPG.php");
            
    $obj = new Register();
            
    $obj->personaggi($_POST['creatore'], $_POST['login'], $_POST['ETAPG'], $_POST['sesso'],
            
    $_POST['AppPol'], $_POST['classe'], $_POST['forza'], $_POST['destrezza'], $_POST['vigore'], $_POST['intelligenza'],
            
    $_POST['spirito'], $_POST['presenza'], $pf);
                } 
    ora, tutto funziona alla perfezione se non aggiungo il mitico "FOR", una volta ha aggiunto quel ciclo la pagina non si vede più... qualcuno saprebbe dirmi perché?

    Vi ringrazio ancora infinite per il tempo che vorrete dedicarmi e mi scuso per la mia poca praticità nel programmare, ma sto cercando di imparare studiando un po' di tutto
    Seo Master alle prime keywords!

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.