在 select 选项标签内使用三元运算符
Using ternary operator inside select option tag
目前我有一个 select 框,它正在从控制器 class 中填充数据。截至目前,所有值都按预期正确填写,但 firstname
有一些空值,我正在尝试为其添加三元运算符以将其替换为电子邮件。
这在我的控制器中似乎不起作用 class,因为我放错了括号。
这是我当前的代码:
public function getContacts($id){
$option = "<option value='0'>Select</option>";
$modelList = $this->listings_model->get_contact(array('contact_type'=>3),'firstname,lastname,email,refno');
foreach($modelList as $m){
$option .= "<option value='".$m['firstname']." ".$m['lastname']." - ".$m['refno']."' id='".$m['id']."'>".$m['firstname']." ".$m['lastname']." - ".$m['refno']."</option>";
}
echo json_encode($option);
}
我尝试了以下方法,但出现语法错误:
$option .= "<option value='"($m['firstname'].$m['lastname'] ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])"' id='".$m['id']."'>".$m['firstname']." ".$m['lastname']." - ".$m['refno']."</option>";
我要实现的是:
value="<?php echo ($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno']; ?>"
$m['firstname'].$m['lastname']
是恶。您应该只检查 $m['firstname']
的 null
值,而不是两者都检查。
另外,应该是:
$option .= "<option value='".($m['firstname'] !== null ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."' id='".$m['id']."'>".($m['firstname'] !== null ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."</option>";
我们有这些叫做变量的东西可以帮助代码变得可读。此外,括号可以帮助识别变量组以及它们之间在三元运算符中的运算。您的代码中有几个错位的 '
和 "
,在 PHP 和 HTML 中都有。
根据我对您的要求的了解,以下代码执行此操作:
如果名字和姓氏不为空,它将使用 <firstname> <lastname> - <ref>
作为选项的值和文本,否则它将使用 <email>
如果电子邮件不为空,否则 <mobile>
$name = ( $m['firstname'] && $m['lastname'] ) ? ( $m['firstname'] . ' ' . $m['lastname'] ) : ( '' );
$value = $name ? ($name . ' - ' . $m['refno']) : ($m['email'] ? $m['email'] : $m['mobile']);
$id = $m['id'];
$option .= "<option value=\"$value\" id=\"$id\">$value</option>";
顺便说一句,你不能 json_encode 一个 HTML 字符串。
目前我有一个 select 框,它正在从控制器 class 中填充数据。截至目前,所有值都按预期正确填写,但 firstname
有一些空值,我正在尝试为其添加三元运算符以将其替换为电子邮件。
这在我的控制器中似乎不起作用 class,因为我放错了括号。
这是我当前的代码:
public function getContacts($id){
$option = "<option value='0'>Select</option>";
$modelList = $this->listings_model->get_contact(array('contact_type'=>3),'firstname,lastname,email,refno');
foreach($modelList as $m){
$option .= "<option value='".$m['firstname']." ".$m['lastname']." - ".$m['refno']."' id='".$m['id']."'>".$m['firstname']." ".$m['lastname']." - ".$m['refno']."</option>";
}
echo json_encode($option);
}
我尝试了以下方法,但出现语法错误:
$option .= "<option value='"($m['firstname'].$m['lastname'] ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])"' id='".$m['id']."'>".$m['firstname']." ".$m['lastname']." - ".$m['refno']."</option>";
我要实现的是:
value="<?php echo ($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno']; ?>"
$m['firstname'].$m['lastname']
是恶。您应该只检查 $m['firstname']
的 null
值,而不是两者都检查。
另外,应该是:
$option .= "<option value='".($m['firstname'] !== null ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."' id='".$m['id']."'>".($m['firstname'] !== null ? $m['firstname']." ".$m['lastname']." - ".$m['refno'] : $m['email'])."</option>";
我们有这些叫做变量的东西可以帮助代码变得可读。此外,括号可以帮助识别变量组以及它们之间在三元运算符中的运算。您的代码中有几个错位的 '
和 "
,在 PHP 和 HTML 中都有。
根据我对您的要求的了解,以下代码执行此操作:
如果名字和姓氏不为空,它将使用 <firstname> <lastname> - <ref>
作为选项的值和文本,否则它将使用 <email>
如果电子邮件不为空,否则 <mobile>
$name = ( $m['firstname'] && $m['lastname'] ) ? ( $m['firstname'] . ' ' . $m['lastname'] ) : ( '' );
$value = $name ? ($name . ' - ' . $m['refno']) : ($m['email'] ? $m['email'] : $m['mobile']);
$id = $m['id'];
$option .= "<option value=\"$value\" id=\"$id\">$value</option>";
顺便说一句,你不能 json_encode 一个 HTML 字符串。