在选择选项标签内使用三元运算符

Posted

技术标签:

【中文标题】在选择选项标签内使用三元运算符【英文标题】:Using ternary operator inside select option tag 【发布时间】:2022-01-10 21:29:33 【问题描述】:

目前我有一个选择框,它正在从控制器类中填充其数据。截至目前,所有值都按预期正确填写,但firstname 有一些空值,我正在尝试添加一个三元运算符以将其替换为电子邮件。

这在我的控制器类中似乎不起作用,因为我把括号放错了。

这是我当前的代码:

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="&lt;?php echo ($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno']; ?&gt;"

【问题讨论】:

$m['firstname'].$m['lastname'] 是邪恶的。您应该只检查 $m['firstname'] 的空值,而不是两者。 应该是$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;/option&gt;"; @OMiShah 好的,但现在如果我想按名字和姓氏检查怎么办。我实际上希望它看起来像这样:($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno']; 【参考方案1】:

我们有这些称为变量的东西,可以帮助代码变得可读。此外,括号可以帮助在三元运算符中识别变量组以及它们之间的运算。您的代码中有几个错位的'",无论是在PHP 还是在html 中。

根据我对您的要求的了解,以下代码执行此操作: 如果名字和姓氏不为空,它将使用&lt;firstname&gt; &lt;lastname&gt; - &lt;ref&gt; 作为选项的值和文本,否则如果电子邮件不为空,它将使用&lt;email&gt;,否则&lt;mobile&gt;

$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>";

顺便说一句,您不能对 HTML 字符串进行 json_encode。

【讨论】:

我想要实现的基本上是($ow['firstname'].$ow['lastname']?$ow['firstname'].' '.$ow['lastname']:($ow['email']?$ow['email']:$ow['mobile'])).' - '.$ow['refno'];,它将检查 firstname lastname 是否存在,然后将这些值放置在电子邮件或移动设备上。那么现在如何在 $value 变量中形成它? @JAYZ 你想检查 firstname 和 lastname 是否都为空还是其中一个就足够了? 我需要他们两个,然后在电子邮件中应该有一个三元运算符,就像我在上面的例子中展示的那样 @JAYZ 更新了这些要求的答案,请注意底部的 json_encode 肯定不在正确的位置。【参考方案2】:

$m['firstname'].$m['lastname'] 是邪恶的。您应该只检查 null 的值 $m['firstname'] 而不是两者。

另外,应该是:

$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>";

【讨论】:

以上是关于在选择选项标签内使用三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

三元条件运算符的警告仅在本地范围内发生

箭头函数内的三元运算符

角度三元运算符

是否可以将三元运算符放在开关内? Javascript

三元运算符在 React 组件中用于设置 datalist 选项的值时失败

三元运算符