多个elseif语句存在问题

时间:2019-03-29 19:06:18

标签: php if-statement

试图创建一系列漫长的if else语句。基本上,有四种不同的方案可以根据查询显示不同的按钮。

如果活动是免费的,请按下一个按钮。

但是,如果活动是免费的,但是您必须RSVP(如我们的聚会),请显示此按钮

或者,如果有票但活动不是免费的却有折扣,请显示此按钮,

否则,如果有票但不是免费票,请显示此按钮。

这就是我目前拥有的。

if ( isset($additional_fields[ 'Price' ]) == 'Free' ) {
    echo '<button class="btn-free">This Event is Free!</button></a>';
} elseif( isset($additional_fields[ 'Tickets' ]) && (isset($additional_fields[ 'Price' ])) == 'Free' ) {
    echo '<a href="' . $additional_fields[ 'Tickets' ] . '" target="_blank"><button class="btn-rsvp">Free with RSVP</button></a>';
} elseif( isset($additional_fields[ 'Tickets' ]) && (isset($additional_fields[ 'Price' ])) != 'Free' && (isset($additional_fields[ 'Discounts' ]))) {
    echo '<a href="' . $additional_fields[ 'Tickets' ] . '" target="_blank"><button class="btn-discount">Tickets ' . $additional_fields[ 'Discount Text' ] . '</button></a>';
} elseif( isset($additional_fields[ 'Tickets' ]) ){
    echo '<a href="' . $additional_fields[ 'Tickets' ] . '" target="_blank"><button class="btn-tkts">Get Tickets</button></a>';
}

代码有效。如果我有一个免费的活动,我会得到“此活动是免费的”按钮,但是如果我有一个免费的活动,但又提供门票/ rsvp,我仍然会得到第一个没有链接的免费按钮。第二步应该在这里进行。不是第一个。如果加上价格或“免费”一词以外的任何内容,则可以达成相同交易。

我的订单正确吗?还是代码中的其他内容?

4 个答案:

答案 0 :(得分:1)

例如,您应尝试测试密钥是否与“是否等于”分开设置。

if ( isset($additional_fields[ 'Price' ]) && $additional_fields[ 'Price' ] == 'Free' ){
do this
}

由于isset只会返回true或false。

答案 1 :(得分:0)

您似乎对条件顺序和isset()的使用有疑问。我认为以下代码是您的目标:

if( isset($additional_fields[ 'Tickets' ]) && isset($additional_fields[ 'Price' ]) && $additional_fields[ 'Price' ] == 'Free' ) {
    echo '<a href="' . $additional_fields[ 'Tickets' ] . '" target="_blank"><button class="btn-rsvp">Free with RSVP</button></a>';
} elseif ( isset($additional_fields[ 'Price' ])  && $additional_fields[ 'Price' ] == 'Free' ) {
    echo '<button class="btn-free">This Event is Free!</button></a>';
} elseif( isset($additional_fields[ 'Tickets' ]) && isset($additional_fields[ 'Price' ]) && isset($additional_fields[ 'Discounts' ])) {
    echo '<a href="' . $additional_fields[ 'Tickets' ] . '" target="_blank"><button class="btn-discount">Tickets ' . $additional_fields[ 'Discount Text' ] . '</button></a>';
} elseif( isset($additional_fields[ 'Tickets' ]) ){
    echo '<a href="' . $additional_fields[ 'Tickets' ] . '" target="_blank"><button class="btn-tkts">Get Tickets</button></a>';
}

答案 2 :(得分:0)

是的,您将得到第一条陈述,因为您在第一条陈述中已经检查了该陈述

if ( isset($additional_fields[ 'Price' ]) == 'Free' )

所以现在在第一条语句中价格是免费的,因此,当满足if()时,为什么代码会转到else语句

而且您还使用了isset(),它的返回值只是布尔值
使用这个

if ( $additional_fields[ 'Price' ] == 'Free' && !isset($additional_fields[ 'Tickets' ])) {
echo "Your button"

} ...

将其用于所有语句

让我知道是否还有任何问题。

希望它对您有帮助

答案 3 :(得分:0)

我建议事先检查并设置变量,以使代码更易于阅读。

$tickets = (isset($additional_fields['Tickets'])) ? $additional_fields['Tickets'] : false;
$price = (isset($additional_fields['Price'])) ? $additional_fields['Price'] : false;
$discounts = (isset($additional_fields['Discounts'])) ? $additional_fields['Discounts'] : false;
$discount_text = (isset($additional_fields['Discount Text'])) ? $additional_fields['Discount Text'] : false;

由于您的所有条件都取决于tickets的设置,因此只需检查开头并排除它即可。

if ($tickets) {
    if ($price == "Free") {
        echo '<a href="' . $tickets . '" target="_blank"><button class="btn-rsvp">Free with RSVP</button></a>';
    } else if ($discounts) {
        echo '<a href="' . $tickets . '" target="_blank"><button class="btn-discount">Tickets ' . $discount_text . '</button></a>';
    } else {
        echo '<a href="' . $tickets . '" target="_blank"><button class="btn-tkts">Get Tickets</button></a>';
    }
}