Luigi Spezia
Luigi Spezia

Reputation: 43

Switch statement : get the same result but with less code

I have the impression that this script can be rewritten in a shorter way but I can not figure out how . Is there a shorter way to do this ?

switch($n){
            case 1:
                $eta1 = $_POST['eta_1'];
                break;
            case 2:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                break;
            case 3:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                break;
            case 4:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                break;
            case 5:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                $eta5 = $_POST['eta_5'];
                break;
            case 6:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                $eta5 = $_POST['eta_5'];
                $eta6 = $_POST['eta_6'];
                break;
            case 7:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                $eta5 = $_POST['eta_5'];
                $eta6 = $_POST['eta_6'];
                $eta7 = $_POST['eta_7'];
                break;
            case 8:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                $eta5 = $_POST['eta_5'];
                $eta6 = $_POST['eta_6'];
                $eta7 = $_POST['eta_7'];
                $eta8 = $_POST['eta_8'];
                break;
            case 9:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                $eta5 = $_POST['eta_5'];
                $eta6 = $_POST['eta_6'];
                $eta7 = $_POST['eta_7'];
                $eta8 = $_POST['eta_8'];
                $eta9 = $_POST['eta_9'];
                break;
            case 10:
                $eta1 = $_POST['eta_1'];
                $eta2 = $_POST['eta_2'];
                $eta3 = $_POST['eta_3'];
                $eta4 = $_POST['eta_4'];
                $eta5 = $_POST['eta_5'];
                $eta6 = $_POST['eta_6'];
                $eta7 = $_POST['eta_7'];
                $eta8 = $_POST['eta_8'];
                $eta9 = $_POST['eta_9'];
                $eta10 = $_POST['eta_10'];
                break;
            default:
                break;
        }

The name reflects the value of the variable $ _POST received .

Using the code posted by @Don't Panic I need to update and to insert the values ​​of variables inside an existing array.

for ($i=1; $i <= $n_bambini; $i++) {
        ${"eta$i"} = $_POST["eta_$i"];
        $_SESSION['dati_cerca_vacanza'] = ["eta$i"=>${"eta$i"}];
    }

The array already exists in this format :

$_SESSION['dati_cerca_vacanza']= ['citta'=>$citta, 'tipo_vacanza'=>$tipo_vacanza, 'lingua'=>$lingua, 'data_arrivo'=>$data_arrivo, 'data_partenza'=>$data_partenza, 'n_adulti'=>$n_adulti, 'n_bambini'=>$n_bambini];

Because it does not work?

Upvotes: 1

Views: 55

Answers (3)

Don&#39;t Panic
Don&#39;t Panic

Reputation: 41810

One way with variable variables:

for ($i=1; $i <= $n; $i++) { 
    ${"eta$i"} = $_POST["eta_$i"];
}

The ${"eta$i"} creates your various $eta1, $eta2, etc. variable names and $_POST["eta_$i"] gets the corresponding values from $_POST.


Regarding your edit, if you want to append these values to that session key, instead of this

$_SESSION['dati_cerca_vacanza'] = ["eta$i"=>${"eta$i"}];

You can use this

$_SESSION['dati_cerca_vacanza']["eta$i"] = $_POST["eta_$i"];

The way you're doing it would replace the entire contents of $_SESSION['dati_cerca_vacanza'] with each iteration.

Upvotes: 0

Pipe
Pipe

Reputation: 2424

You can invert the options like this

switch($n){
        case 10:
            $eta10 = $_POST['eta_10'];
        case 9:
            $eta9 = $_POST['eta_9'];
        case 8:
            $eta8 = $_POST['eta_8'];
        case 7:
            $eta7 = $_POST['eta_7'];
        case 6:
            $eta6 = $_POST['eta_6'];
        case 5:
            $eta5 = $_POST['eta_5'];
        case 4:
            $eta4 = $_POST['eta_4'];
        case 3:
            $eta3 = $_POST['eta_3'];
        case 2:
            $eta2 = $_POST['eta_2'];
        case 1:
            $eta1 = $_POST['eta_1'];
   }

Note there is no break inside the cases, so, if $n == 10... all the cases below are executed

Upvotes: 2

rak007
rak007

Reputation: 1011

Why using so many values when you can use an array ?

$eta = array_values($_POST['eta']);

Just make sure you make your input field go into an eta array

Upvotes: 0

Related Questions