为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕勒3428872 2021-06-06 17:42:23
在 yang 配置中,我有一些参数,例如:$application_promo_shipping = true;$application_promo_engrave = false;我用这样的三元条件制作 PHP 代码:<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 个参数做这样的事情,如果运输和雕刻是真的,我想像这样调用一个段落:免费雕刻和免费送货因为现在的代码,如果我将值更改为true2 个参数,我在 1 个段落和另一个段落之间有很多空间。
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

对于您在这里的主要问题...


您可以在一个三元条件下使用多个运算符,它看起来像这样:


$output = ($var1 === true && ($var2 == 2 || $var3 == 3)) ? 'if true' : 'if false';

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


只需将您的配置值重命名为更易于理解和更短的内容:),然后您就可以进行三元运算,代码看起来会很好。


方法编号 1:


<?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:(不推荐)


<?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>



查看完整回答
反对 回复 2021-06-13
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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


通过三元运算符使用较短的代码可能很有用 - 但在这种情况下,如果使用普通if语句,条件为真,则根本不呈现输出可能会更好。


$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)。


<p class="mx-auto nav-link-promo <?= count($output) ?: 'd-none'; ?>"><?= implode(" & ", $output); ?></p>



查看完整回答
反对 回复 2021-06-13
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

我倾向于使用更简单的方法来使我的代码对其他开发人员可读。没有什么比有人试图变得不必要的聪明而不得不破译代码更糟糕的了。


我会做这样的事情:


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>';

}


查看完整回答
反对 回复 2021-06-13
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信