2016-09-16 2 views
1

У меня сложилось впечатление, что этот скрипт можно переписать короче, но я не могу понять, как это сделать. Есть ли более короткий способ сделать это?Оператор switch: получить тот же результат, но с меньшим кодом

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.

Использование кода, отправленного @ Do not 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]; 

Потому что это не работает?

+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']); 

Просто убедитесь, что вы делаете ваш вклад поле перейти в массив эты

+0

я должен подчеркнуть возраст < n > детей ... Так что мне нужно знать возраст каждого ребенка .. 5 детей будут иметь разный возраст, например Son 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 ... все нижеследующие случаи выполнены

Смежные вопросы