2016-09-16 63 views
1

我的印象是這個腳本可以用較短的方式重寫,但我無法弄清楚。 有沒有更簡單的方法來做到這一點?切換語句:獲得相同的結果,但代碼較少

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收到的值。

使用@發佈的代碼不要恐慌我需要更新並在現有數組中插入變量的值。

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

因爲它不工作?

+0

你只是想節省代碼行嗎? –

+0

@ THarris76是... –

+0

定義一次數組中的最大可能情況,並根據切換條件切片該數組。 – arkascha

回答

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']的全部內容。

+0

我並不確定你的意思,但如果你多解釋一下,我可能會提供幫助。 –

+0

我正在嘗試使用您的代碼,但當我嘗試向現有數組添加幾個鍵值時,我遇到問題 –

+0

我無法在註釋中編寫代碼!你可以在評論中插入代碼塊? –

0

爲什麼在使用數組時使用這麼多的值?

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

只要確保你讓你輸入字段進入一個ETA陣列

+0

我必須強調的< n >孩子年齡......所以,我需要知道每個孩子的年齡.. 5個孩子都將有例如 兒子1(eta_1) 兒子2(eta_2) 不同年齡等等.. –

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 ...以下所有情況都被執行

相關問題