PHP - 如果语句膨胀

时间:2014-11-15 02:25:37

标签: php

用户可以获得多个选项,将不同的类添加到读入PHP的内容中 -

以下工作原理,但效率非常低,使用了大量代码。有没有办法可以减少它?

<?php
    if(get_sub_field('status') == "Upcoming"){
        echo '<li class="upcoming">';
    }

    if(get_sub_field('status') == "Next"){
        echo '<li class="next">';
    }

    if(get_sub_field('status') == "See what happened"){
        echo '<li class="happened">';
    }
?>

3 个答案:

答案 0 :(得分:4)

您可以创建一个包含所需值的表。这种方式消除了所有if语句。请记住,这在功能上等同于上面的代码。

$opt_vals = array(
    "Upcoming",
    "Next",
    "See what happened"
);

$val_to_search = get_sub_field("status");

if(($key = array_search($val_to_search, $opt_vals)) !== FALSE) {
     echo '<li class="' . strtolower($val_to_search) . '">';
}

由于array_search返回带有相应值的键,$key将保留键,但是当@Timur强调时,相应索引0处的值将评估为FALSE,0,所以为了真正检查它是否具有值,我们必须使用严格的!==运算符,因为0 == NULL将评估为true。

答案 1 :(得分:0)

你可以用if ... else来做这件事。

<?php
    $status = get_sub_field('status');

    if( $status == 'upcoming')
       $class = 'upcoming';
    else if( $status == 'Next' )
       $class = 'next';
    else if( $status == 'See what happened')
       $class = 'happened';
?>
<li class="<?php echo $class; ?>"></li>

答案 2 :(得分:-1)

你可以改变它的唯一方法是:

echo '<li class="' . get_sub_field('status') . '">';

否则就无法解决这个问题!您必须使用ifelseif,或者制作switch声明

当您希望查看值是否有效时,您可以制作类似白名单的数组:

$valid = array(
            "Upcoming",
            "Next",
            "See what happened"
         );

然后你可以这样检查:

if($value = array_search(get_sub_field("status"), $valid))
     echo '<li class="' . strtolower($value) . '">';
else
    echo '<li class="default">'; //if something fails