有没有更有效的方法来运行我的PHP IF ... ELSEIF语句?

时间:2014-05-29 15:48:19

标签: php if-statement

这是我刚刚添加到购物车中的一个片段,它基本上会呈现一个包含4个数量选项的选择框,并刷新页面。最初,有一个简单的输入框,用户可以使用它来操纵数量,但是一小部分用户实际上并没有点击"更新购物车"在他们前往Checkout之前,我决定更积极主动。除了UX实践和AJAX方法之外,我只是好奇这些选项的冗余是否在PHP中是必要的。我怎样才能提高效率呢?

<select name="quantity" onchange="return updateCart();">
<?php if($this->getQty() == 1) : ?>
    <option value="1" selected="selected">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
<?php elseif($this->getQty() == 2) : ?>
    <option value="1">1</option>
    <option value="2" selected="selected">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
<?php elseif($this->getQty() == 3) : ?>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3" selected="selected">3</option>
    <option value="4">4</option>
<?php elseif($this->getQty() == 4) : ?>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4" selected="selected">4</option>
<?php else : ?>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
<?php endif; ?>
 </select>

4 个答案:

答案 0 :(得分:6)

$quantity = $this->getQty();
for($i=1; $i<=4; $i++){
  if($quantity == $i)
     echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
  else
     echo '<option value="'.$i.'">'.$i.'</option>';
}

答案 1 :(得分:2)

首先,只调用一次getQty()函数。保存返回值,然后检查。

其次,无需重复所有选项。根据实际用例的不同,使用循环可能更有意义,或者像这样做......

<select name="quantity" onchange="return updateCart();">
<?php $qty = $this->getQty(); ?>
    <option value="1" <?php if($qty == 1): ?>selected="selected"<?php endif; ?>>1</option>
    <option value="2" <?php if($qty == 2): ?>selected="selected"<?php endif; ?>>2</option>
    <option value="3" <?php if($qty == 3): ?>selected="selected"<?php endif; ?>>3</option>
    <option value="4" <?php if($qty == 4): ?>selected="selected"<?php endif; ?>>4</option>
</select>

使用循环的示例

<select name="quantity" onchange="return updateCart();">
<?php $qty = $this->getQty();
    for($i=1; $i<=4; $i++):
?>
<option value="<?php echo $i; ?>" <?php if($qty == $i): ?>selected="selected"<?php endif; ?>><?php echo $i; ?></option>
<?php endfor; ?>
</select>

答案 2 :(得分:0)

这个怎么样:

<select name="quantity" onchange="return updateCart();">
    <option value="1" <? echo ($this->getQty()==1?'selected="selected"':""); ?> >1</option>
    <option value="2" <? echo ($this->getQty()==2?'selected="selected"':""); ?> >2</option>
    <option value="3" <? echo ($this->getQty()==3?'selected="selected"':""); ?> >3</option>
    <option value="4" <? echo ($this->getQty()==4?'selected="selected"':""); ?> >4</option>
</select>

它不会使您的代码更快,但更小且更多清除

如果您的选项越来越多,请考虑使用for循环。

答案 3 :(得分:0)

这有点浓缩,但我不认为它效率更高或更好,但你可能会喜欢它。

<select name="quantity" onchange="return updateCart();">
    <?php for($i=1;$i<5;$i++): ?>
    <option value="<?php echo $i; ?>" <?php echo ( $this->getQty() == $i ? 'selected="selected"' : '' ); ?>><?php echo $i; ?></option>
    <?php endfor; ?>
</select>