0

我正在尝试改写 a 条件以删除{ .. }语句(以减少代码缩进)。

目前我有:

while($something){
  if((strcasecmp($str1, $str2)  === 0)
     || (isset($arr[0]) && strcasecmp($str3, $str4) === 0)){

    // a lot of code here...
    break;
  }
}

使用反转的 IF 条件,它应该如下所示:

while($something){
  if((strcasecmp($str1, $str2) !== 0)
     && (empty($arr[0]) && strcasecmp($str3, $str4) !== 0))
       continue;
  // a lot of code here...
  break;
}

但它不起作用。我的代码和 break 语句在不应该执行的时候被执行。

我在这里做错了什么。

4

2 回答 2

1

这应该工作

while($something){
  if((strcasecmp($str1, $str2) !== 0)
     && (!isset($arr[0]) || strcasecmp($str3, $str4) !== 0))
       continue;
  // a lot of code here...
  break;
}
于 2012-07-26T13:14:52.227 回答
1

这里

(empty($arr[0]) && strcasecmp($str3, $str4) !== 0))

&&必须||是。

我自己会保留第一个变体,因为它稍微简单一些。

更新:好的,正如我所想的那样,这break;让我感到奇怪。你想摆脱一个意图?

if ($something 
    && ((strcasecmp($str1, $str2)  === 0) || (isset($arr[0]) && strcasecmp($str3, $str4)) === 0)
){

    // a lot of code here...
}

并且知道一些微优化:)(!strcasecmp()意味着它们平等的,除非是这种情况)

if ($something && (!strcasecmp($str1, $str2) || (isset($arr[0]) && !strcasecmp($str3, $str4))) {

    // a lot of code here...
}

我希望括号匹配。

于 2012-07-26T13:15:31.433 回答