【问题标题】:Converting a nested if-else based on range condition into switch statement将基于范围条件的嵌套 if-else 转换为 switch 语句
【发布时间】:2020-01-10 06:52:16
【问题描述】:

如何在 PHP 中将以下长 if-else 条件转换为 switch case?或者,请提出除开关盒外的任何可行解决方案。

if($total_products >= 1 && $total_products <=10 ){

} elseif ($total_products >= 11 && $total_products <=25 ){

} elseif ($total_products >= 26 && $total_products <=40 ){

} elseif ($total_products >= 181 && $total_products <=200 ){

} elseif ($total_products >= 351 && $total_products <=400 ){

} elseif ($total_products >= 401 && $total_products <=500 ){

} elseif ($total_products > 500 ){

}

【问题讨论】:

  • 这能回答你的问题吗? Conditional switch statements in PHP
  • 多态性似乎是个好主意。您可以查看此链接refactoring.guru/replace-conditional-with-polymorphism
  • 为什么?这有什么问题?
  • 建议副本中的 switch 语句与您当前的代码相比并没有真正改进。如果您记得代码从上到下运行,您当前的代码可以简化一点,这意味着您可以拥有if ($total_products &lt;= 10) { ... } elseif ($total_products &lt;= 25) { ... } ... etc... 也就是说,您不需要在每个条件中指定范围,范围将是隐式的由于elseif 的订购。
  • 当 40

标签: php


【解决方案1】:

你可以制作一个小函数来完成这项工作,并且可以像这样使用它:

pubic function isInRange($value, $min, $max){
return ($value <= $max && $value >= $min);
}

你可以像这样使用这个函数:

$value = 16;

$ranges = array(
  'range1'=> array(
    'min'=> 1,
    'max'=> 10
  ),
  'range2'=> array(
    'min'=> 11,
    'max'=> 20
  )
);

  function isInRange($value, $min, $max){
  return ($value <= $max && $value >= $min);
}

foreach($ranges as $key => $range){
  echo (isInRange($value, $range['min'], $range['max']))? $key.' returned true': $key.' returned false';
}

【讨论】:

  • 只能在该函数中使用return $value &lt;= $max &amp;&amp; $value &gt;= $min;
  • @Jeto Done,我在想这个:)
【解决方案2】:

另一种选择是使用filter_var 方法:

filter_var(
$yourInteger, 
FILTER_VALIDATE_INT, 
array(
    'options' => array(
        'min_range' => $min, 
        'max_range' => $max
    )
)

);

请注意,filter_var 方法是类型安全的。 您将在我上面链接的 php.net 站点的底部看到许多很好的工作示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2019-07-04
    • 2019-04-09
    相关资源
    最近更新 更多