Switch语句:获得相同的结果但代码更少

时间:2016-09-16 14:37:40

标签: php switch-statement

我的印象是这个脚本可以用更短的方式重写,但我无法弄清楚如何。 有没有更短的方法来做到这一点?

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;
        }

该名称反映了收到的变量$ _POST的值。

使用@ Don&#t; t Panic发布的代码我需要更新并在现有数组中插入变量值。

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

该数组已经以这种格式存在:

$_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];

因为它不起作用?

3 个答案:

答案 0 :(得分:2)

您可以反转这样的选项

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'];
   }

请注意,案例中没有break,因此,如果$n == 10 ...执行以下所有案例

答案 1 :(得分:0)

变量变量的一种方法:

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

${"eta$i"}创建各种$eta1$eta2等变量名称,$_POST["eta_$i"]$_POST获取相应的值。

关于编辑,如果要将这些值附加到该会话密钥,而不是此

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

您可以使用此

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

您执行此操作的方式将在每次迭代时替换$_SESSION['dati_cerca_vacanza']的全部内容。

答案 2 :(得分:0)

为什么在使用数组时使用这么多值?

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

确保你的输入字段进入eta数组