【问题标题】:PHP how can I optimize this ? many if conditions strposPHP 我该如何优化呢?许多 if 条件 strpos
【发布时间】:2013-01-13 06:34:48
【问题描述】:

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

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

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

【问题讨论】:

  • 优化 - 性能还是可读性?
  • ifs的常用部分合并为一个?

标签: php magento optimization if-statement


【解决方案1】:
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;
    }
  }
}

【讨论】:

    【解决方案2】:

    因为所有的 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";
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 2023-03-03
        相关资源
        最近更新 更多