PHP如何优化这个?如果条件改变,很多

时间:2013-01-29 16:09:14

标签: php magento optimization if-statement

我有以下代码检查某些变量是否包含某些特定字词。

我确信有一种方法可以真正缩短它。我是一个总菜鸟,所以我无法确定如何优化这段代码。任何帮助都会很棒..!

<?php
if (in_array(1259, $_product->getCategoryIds()) && (strpos($fabriquant,'word') !== false)) {
    echo "Doh";
} elseif (in_array(1259, $_product->getCategoryIds()) && (strpos($fabriquant,'wurd') !== false)) {
    echo "Bam";
} elseif (in_array(1259, $_product->getCategoryIds()) && (strpos($fabriquant,'ward') !== false)) {
    echo "Yes";
} elseif (in_array(1259, $_product->getCategoryIds()) && (strpos($fabriquant,'wierd') !== false)) {
    echo "No";
}
endif;
?>

3 个答案:

答案 0 :(得分:3)

if (in_array(1259, $_product->getCategoryIds())) {
  $words = array(
    'word' => 'Doh',
    'wurd' => 'Bam',
    'ward' => 'Yes',
    'wierd' => 'No',
  );

  foreach ($words as $word => $message) {
    if (false !== strpos($fabriquant, $word)) {
      echo $message;
      break;
    }
  }
}

答案 1 :(得分:2)

第一个优化可以是嵌套的if语句:

if (in_array(1259, $_product->getCategoryIds()) {
  if(strpos($fabriquant,'wurd') !== false) {
  } elseif ....
}

然后你把最可能的condiction测试作为第一次检查,然后是第二次最可能的条件,等等......

答案 2 :(得分:0)

因为所有if块都有一个共同的组件,所以最好提取它并只测试一次。其他独特的点可以单独检查。

if ( in_array(1259, $_product->getCategoryIds()) )
{
    if ( strpos($fabriquant,'word') !== false ) {
        echo "Doh";
    } elseif ( strpos($fabriquant,'wurd') !== false ) {
        echo "Bam";
    } elseif ( strpos($fabriquant,'ward') !== false ) {
        echo "Yes";
    } elseif ( strpos($fabriquant,'wierd') !== false ) {
        echo "No";
    }
}