0

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

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

<?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;
?>
4

3 回答 3

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;
    }
  }
}
于 2013-01-29T16:16:34.540 回答
2

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

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

然后您将测试最可能的条件作为第一个检查,然后是第二个最可能的条件,依此类推......

于 2013-01-29T16:16:00.277 回答
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";
    }
}
于 2013-01-29T16:16:08.267 回答