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))

&&なければなりません||

私自身は、最初のバリアントを保持します。これは、少し簡単だからです。

更新:OK、考えbreak;てみると不思議に思う. 1つの意図を取り除きたいですか?

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 に答える