首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在三元条件下添加两个参数- PHP?

问如何在三元条件下添加两个参数- PHP?
EN

Stack Overflow用户
提问于 2019-05-10 05:15:39
回答 3查看 128关注 0票数 0

在yang config i中,a有一些参数,如:

代码语言:javascript
复制
$application_promo_shipping = true;
$application_promo_engrave = false;

我使用这样一个三元条件来编写PHP代码:

代码语言:javascript
复制
<p class="mx-auto nav-link-promo <?= ($this->config->item('application_promo_shipping')?:"d-none")?>">Free Shipping</p>

<p class="mx-auto nav-link-promo <?= ($this->config->item('application_promo_engrave')?:"d-none")?>">Free engrave</p>

如果值为true,则"d-none"类为hide,因此唯一的文本显示是Free shipping。

但是,如果航运和雕刻是真的,我如何用两个参数来制作这样的代码,我想这样称呼一个段落:

免费雕刻及免费送货

因为现在使用代码,如果我在2个参数中将值更改为true,那么在1段到另一段之间有很大的空间。

EN

回答 3

Stack Overflow用户

发布于 2019-05-10 10:44:58

你的主要问题..。

--您可以在一个三元条件下使用多个操作符,它将如下所示:

代码语言:javascript
复制
$output = ($var1 === true && ($var2 == 2 || $var3 == 3)) ? 'if true' : 'if false';

,但,在您的情况下,我不推荐它,因为您的三元条件将是一个很长的行,其他程序员很难理解。那么,..。我该怎么解决呢?

只要将您的配置值重命名为更容易理解和更简短的内容:),那么您就可以执行三元操作,代码就会看起来很好。

方法1:

代码语言:javascript
复制
<?php

    $messages = [
        0 => 'Free Shipping',
        1 => 'Free engrave',
        2 => 'FREE ENGRAVE & FREE shipping'
    ];

    $shipping = $this->config->item('application_promo_shipping');
    $engrave = $this->config->item('application_promo_engrave');
    $message_key = ($shipping && $engrave) ? 2 : (($engrave) ? 1 : 0);

?>

<p class="mx-auto nav-link-promo"><?php echo $messages[$message_key]; ?></p>

方法2: (不推荐)

代码语言:javascript
复制
<?php

    $shipping = $this->config->item('application_promo_shipping');
    $engrave = $this->config->item('application_promo_engrave');

?>

<p class="mx-auto nav-link-promo <?php echo ($shipping) ? '' : 'd-none'; ?>">Free Shipping</p>

<p class="mx-auto nav-link-promo <?php echo ($engrave) ? '' : 'd-none'; ?>">Free engrave</p>

<p class="mx-auto nav-link-promo <?php echo ($shipping && $engrave) ? '' : 'd-none'; ?>">FREE ENGRAVE & FREE shipping</p>
票数 1
EN

Stack Overflow用户

发布于 2019-05-10 05:35:04

其中一种方法是基于这两个变量创建输出,并将其存储在一个数组中。如果长度至少为1或更高,则打印段落并使用分隔符implode() &表示值。这样,如果这两个条件都是假的,那么段落甚至不会在HTML中呈现。

通过三元操作符使用更短的代码可能是有用的--但在这种情况下,如果条件是真的,使用普通的if语句可能会更好。

代码语言:javascript
复制
$output = [];
if ($this->config->item('application_promo_shipping')) {
     $output[] = "Free shipping";
}
if ($this->config->item('application_promo_engrave')) {
     $output[] = "Free engraving";
}

if (count($output)) {
    ?>
    <p class="mx-auto nav-link-promo"><?php echo implode(" & ", $output); ?></p>
    <?php
}

如果您一心想使用三元和d-none类,那么您也可以在相同的条件下这样做(但是仍然需要前两个if块来声明$output的值)。

代码语言:javascript
复制
<p class="mx-auto nav-link-promo <?= count($output) ?: 'd-none'; ?>"><?= implode(" & ", $output); ?></p>
票数 0
EN

Stack Overflow用户

发布于 2019-05-10 12:04:44

我倾向于使用一种简单得多的方法,以便让其他开发人员能够读懂我的代码。没有什么比破译代码更糟糕的了,因为有人试图变得毫无必要的聪明。

我会做这样的事情:

代码语言:javascript
复制
if (application_promo_shipping AND !application_promo_engrave) {
    echo '<p class="mx-auto nav-link-promo">Free Shipping</p>';
}

if (application_promo_engrave AND !application_promo_shipping) {
    echo '<p class="mx-auto nav-link-promo">Free Engraving</p>';
}

if (application_promo_engrave AND application_promo_shipping) {
    echo '<p class="mx-auto nav-link-promo">Free Engraving</p> & <p class="mx-auto nav-link-promo">Free Shipping</p>';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56071071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档