Гало! Я не уверен, где я ошибаюсь в своем заявлении о переключении! Вот что я хочу сделать для моего кода:
Если все три переменных пусты, то я ничего не хочу. Однако, если нет, то я хочу посмотреть, какие из них пусты, а какие нет, и выполняют разные задачи на основе их состояния.
Если они не пусты, я хочу добавить строку перед переменной. Если они пусты, я хочу добавить строку с сообщением «.. ПОЖАЛУЙСТА, ПРЕДОСТАВЛЯЙТЕ ИНФОРМАЦИЮ».
С текущими жестко закодированными переменными он должен возвращать:
Airline Name: United Flight Number: 262 Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT
но он возвращает:
Airline Name: PLEASE PROVIDE AIRLINE NAME Flight Number: PLEASE PROVIDE FLIGHT NUMBER Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT
Код:
$airline_name = "United"; $flight_number = 262; $departure_airport = ""; function airport($one, $two, $three) { if ($one =="" && $two =="" && $three =="") { } else { switch(true) { case !empty($one): $one = "Airline Name: $one<br>"; case empty($one): $one = "Airline Name: PLEASE PROVIDE AIRLINE NAME<br>"; case !empty($two): $two = "Flight Number: $two<br>"; case empty($two): $two = "Flight Number: PLEASE PROVIDE FLIGHT NUMBER<br>"; case !empty($three): $three = "Departure Airport: $three<br>"; case empty($three): $three = "Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT<br>"; } } echo $one, $two, $three; } airport($airline_name,$flight_number,$departure_airport); ?>
Рейс$airline_name = "United"; $flight_number = 262; $departure_airport = ""; function airport($one, $two, $three) { if ($one =="" && $two =="" && $three =="") { } else { switch(true) { case !empty($one): $one = "Airline Name: $one<br>"; case empty($one): $one = "Airline Name: PLEASE PROVIDE AIRLINE NAME<br>"; case !empty($two): $two = "Flight Number: $two<br>"; case empty($two): $two = "Flight Number: PLEASE PROVIDE FLIGHT NUMBER<br>"; case !empty($three): $three = "Departure Airport: $three<br>"; case empty($three): $three = "Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT<br>"; } } echo $one, $two, $three; } airport($airline_name,$flight_number,$departure_airport); ?>
Поведение, которое вы хотите, будет достигнуто с помощью if else
или trernary operator (что в значительной степени представляет собой короткий способ записи if/else
). Вот грубый непроверенный пример.
function airport($one, $two, $three) { if ( !empty($one) || !empty($two) || !empty($three) ) { $one = !empty($one) ? "Airline Name: $one<br>" :"Airline Name: PLEASE PROVIDE AIRLINE NAME<br>"; $two = !empty($two) ? "Flight Number: $two<br>" : "Flight Number: PLEASE PROVIDE FLIGHT NUMBER<br>"; $three = !empty($three) ? "Departure Airport: $three<br>" : "Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT<br>"; } echo $one, $two, $three; } airport($airline_name,$flight_number,$departure_airport);
Что касается того, почему ваш switch
не работает, как вы ожидаете, в руководстве:
Только когда оператор case найден со значением, которое соответствует значению выражения switch, PHP начинает выполнять инструкции. PHP продолжает выполнять инструкции до конца блока коммутатора или в первый раз, когда видит оператор break. Если вы не напишете оператор break в конце списка операторов case, PHP продолжит выполнение утверждений следующего случая.
Здесь есть два вопроса. Во-первых, как указано в комментариях, у вашего оператора switch нет break
s.
Во-вторых, оператор switch может иметь только 1 результат. Итак, как только он найдет свое первое совпадение, которое произойдет, когда $ one будет пустым или не будет пустым, это закончит утверждение.
В этом случае я бы просто использовал ряд, if
вместо этого:
<?php $airline_name = "United"; $flight_number = 262; $departure_airport = ""; function airport($one, $two, $three) { if(!empty($one)){ $one = "Airline Name: $one<br>"; } else { $one = "Airline Name: PLEASE PROVIDE AIRLINE NAME<br>"; } if(!empty($two)){ $two = "Flight Number: $two<br>"; } else { $two = "Flight Number: PLEASE PROVIDE AIRLINE NAME<br>"; } if(!empty($three)){ $three = "Departure Airport: $three<br>"; } else { $three = "Departure Airport: PLEASE PROVIDE AIRLINE NAME<br>"; } echo $one, $two, $three; } airport($airline_name,$flight_number,$departure_airport); ?>
Рейс<?php $airline_name = "United"; $flight_number = 262; $departure_airport = ""; function airport($one, $two, $three) { if(!empty($one)){ $one = "Airline Name: $one<br>"; } else { $one = "Airline Name: PLEASE PROVIDE AIRLINE NAME<br>"; } if(!empty($two)){ $two = "Flight Number: $two<br>"; } else { $two = "Flight Number: PLEASE PROVIDE AIRLINE NAME<br>"; } if(!empty($three)){ $three = "Departure Airport: $three<br>"; } else { $three = "Departure Airport: PLEASE PROVIDE AIRLINE NAME<br>"; } echo $one, $two, $three; } airport($airline_name,$flight_number,$departure_airport); ?>
РЕДАКТИРОВАТЬ В ответ на ваш комментарий, возьмите этот простой пример здесь, если вы запустите его, вы увидите, что код только echos «первым», хотя все три случая одинаковы.
<?php $a = 1; switch ($a) { case 1: echo 'first'; break; case 1: echo 'second'; break; case 1: echo 'third'; break; } ?>
Ваш синтаксис неверен. Операторы switch выглядят следующим образом …
switch ($some_var) { case 'Peter': // if $some_var has value 'Peter' # code... // this line executes if it is true, else breaks and loops through other cases until it finds right val break; default: # code... // default code to be executed if case val isn't found break; }
И один вопрос? Почему вы используете boolean для переключения значений?
Вы не можете использовать оператор switch таким образом, то, что вы сейчас делаете, проходит через все случаи, независимо от вашего состояния, например, если вы меняете первый случай, а второй – на «United». Это потому, что вам нужно поставить перерыв после каждого случая, поэтому, когда он найдет правильный выбор, перерыв цикла. вы можете использовать, если иначе, и выглядели бы проще и меньше
сначала поместите значение по умолчанию как пустое
<?php $airline_name = "United"; $flight_number = 262; $departure_airport = ""; function airport($one, $two, $three) { if ($one =="" && $two =="" && $three =="") { } else { if ($one == '') $one= "PLEASE PROVIDE AIRLINE NAME<br>"; if ($two == '') $two= "PLEASE PROVIDE FLIGHT NUMBER<br>"; if ($three == '') $three = "PLEASE PROVIDE DEPARTURE AIRPORT<br>"; $x1= "Airline Name: ".$one; $x2= "Flight Number: ".$two; $x3= "Departure Airport:".$three; } echo $x1, $x2, $x3; } airport($airline_name,$flight_number,$departure_airport); ?>
Рейс<?php $airline_name = "United"; $flight_number = 262; $departure_airport = ""; function airport($one, $two, $three) { if ($one =="" && $two =="" && $three =="") { } else { if ($one == '') $one= "PLEASE PROVIDE AIRLINE NAME<br>"; if ($two == '') $two= "PLEASE PROVIDE FLIGHT NUMBER<br>"; if ($three == '') $three = "PLEASE PROVIDE DEPARTURE AIRPORT<br>"; $x1= "Airline Name: ".$one; $x2= "Flight Number: ".$two; $x3= "Departure Airport:".$three; } echo $x1, $x2, $x3; } airport($airline_name,$flight_number,$departure_airport); ?>