缩短PHP中的多个elseif?

时间:2015-03-29 15:16:23

标签: php if-statement strpos

所以我想根据字符串包含的内容显示图像,我有多个elseifs?我把它缩短了一点,但这是目前50多行。我认为必须有一个更清洁的方法来做到这一点?

   <?php if(strpos(' '.$this->escape($title).' ', '25% off')){$imgsrc = '25percentoff.png';}
        elseif(strpos(' '.$this->escape($title).' ', '24% off')){$imgsrc = '24percentoff.png';}
        elseif(strpos(' '.$this->escape($title).' ', '23% off')){$imgsrc = '23percentoff.png';}
        elseif(strpos(' '.$this->escape($title).' ', '22% off')){$imgsrc = '22percentoff.png';}
        elseif(strpos(' '.$this->escape($title).' ', '21% off')){$imgsrc = '21percentoff.png';}
        elseif(strpos(' '.$this->escape($title).' ', '20% off')){$imgsrc = '20percentoff.png';}
        elseif(strpos(' '.$this->escape($title).' ', '19% off')){$imgsrc = '19percentoff.png';}
        else{$imgsrc = 'default.png';}
   ?>

2 个答案:

答案 0 :(得分:5)

这是一个解决方案:

$imgsrc = 'default.png';
for ( $percent=100; $percent>0; $percent--) {
    if(strpos($this->escape($title), $percent . '% off') !== false){
        $imgsrc = $percent . 'percentoff.png';
        break;
    }
}

答案 1 :(得分:3)

如果您不知道$title包含的内容,您仍然可以将百分比数字与正则表达式匹配:

<?php

if(preg_match('/^([1-9][0-9]?|100)% off/', $this->escape($title), $matches)) {
  $imgsrc = $matches[1] . 'percentoff.png';
} else {
  $imgsrc = 'default.png';
}