Использование тернарного оператора внутри тега выбора опции

#php #html #codeigniter #conditional-operator

#php #HTML #кодовое устройство #условный оператор

Вопрос:

В настоящее время у меня есть поле выбора, которое заполняет свои данные из класса контроллера. На данный момент все значения заполняются должным образом, как и предполагалось, но есть некоторые нулевые значения firstname , для которых я пытаюсь добавить тернарный оператор, чтобы заменить его электронной почтой.

Похоже, это не работает в моем классе контроллера, так как я неправильно ставлю круглые скобки.

Вот мой текущий код:

 public function getContacts($id){  $option = "lt;option value='0'gt;Selectlt;/optiongt;";   $modelList = $this-gt;listings_model-gt;get_contact(array('contact_type'=gt;3),'firstname,lastname,email,refno');   foreach($modelList as $m){  $option .= "lt;option value='".$m['firstname']." ".$m['lastname']." - ".$m['refno']."' id='".$m['id']."'gt;".$m['firstname']." ".$m['lastname']." - ".$m['refno']."lt;/optiongt;";  }   echo json_encode($option); }   

Я попробовал следующее, но я получаю синтаксическую ошибку:

 $option .= "lt;option value='"($m['firstname'].$m['lastname'] ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])"' id='".$m['id']."'gt;".$m['firstname']." ".$m['lastname']." - ".$m['refno']."lt;/optiongt;";  

Чего я хочу достичь, так это:

value="lt;?php echo ($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno']; ?gt;"

Комментарии:

1. $m['firstname'].$m['lastname'] это и есть зло. Вы должны проверять наличие нулевого значения только $m['firstname'] для одного, а не для обоих.

2. и это должно быть $option .= "lt;option value='".($m['firstname'] ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."' id='".$m['id']."'gt;".$m['firstname']." ".$m['lastname']." - ".$m['refno']."lt;/optiongt;";

3. @OMiShah хорошо, но теперь что, если я хочу проверить по имени и фамилии. Я на самом деле хочу, чтобы это выглядело так: ($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno'];

Ответ №1:

У нас есть такие вещи, называемые переменными, которые помогают коду стать читабельным. Кроме того, круглые скобки могут помочь идентифицировать группы переменных с операциями между ними в тернарном операторе. У вас есть несколько неуместных ' и " в вашем коде, как в PHP, так и в HTML.

Из того, что я понимаю из ваших требований, следующий код делает это: если имя и фамилия не пусты, он будет использовать lt;firstnamegt; lt;lastnamegt; - lt;refgt; значение и текст опции, которую он будет использовать lt;emailgt; , если электронная почта не пуста, иначе lt;mobilegt;

 $name = ( $m['firstname'] amp;amp; $m['lastname'] ) ? ( $m['firstname'] . ' ' . $m['lastname'] ) : ( '' ); $value = $name ? ($name . ' - ' . $m['refno']) : ($m['email'] ? $m['email'] : $m['mobile']); $id = $m['id']; $option .= "lt;option value="$value" id="$id"gt;$valuelt;/optiongt;";  

Кстати, вы не можете json_encode HTML-строку.

Комментарии:

1. Чего я пытаюсь добиться, так это в основном ($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno']; того, чтобы он проверял, есть ли имя и фамилия, а затем размещал эти значения в другом месте по электронной почте или на мобильном телефоне. Итак, как теперь я могу сформировать это в переменной $value?

2. @JAYZ вы хотите проверить, пусты ли имя и фамилия или одного из них достаточно?

3. Мне нужны они оба, а затем, кроме того, в электронной почте должен быть троичный оператор, как я показал в своем примере выше

4. @JAYZ обновил ответ на эти требования, и, пожалуйста, обратите внимание, что код json_encode внизу, безусловно, находится не в том месте.

Ответ №2:

$m['firstname'].$m['lastname'] это и есть зло. Вы должны проверять null значение только для $m['firstname'] одного, а не для обоих.

Кроме того, это должно быть:

 $option .= "lt;option value='".($m['firstname'] !== null ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."' id='".$m['id']."'gt;".($m['firstname'] !== null ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."lt;/optiongt;";