PHP:ループの中で条件分岐のネストが深くなってしまったら?

ループの中で条件分岐のネストが多重になってしまうと非常に読みにくいので、continueを使って処理をはじいていきましょう。

以下の例で見ていきましょう!

改善前

<?php
foreach($items as $item){
  if($item == "条件1"){
    if($item == "条件2"){
      if($item== "条件3"){
        dosomething();
      } else {
        except3();
      }
    } else{
      except2();
    }
  } else {
    except1();
  }
  allways_do();
}

例えばこんな処理の時、foreachの中身がif文の3重ネストになっていますね。これを修正すると…

改善後

if文の中の判定条件を反転させて、条件に合わないものである場合、改善前にelseで行っていたとif文の下で常に行っていた処理を実行してcontinueでループの先頭に戻ります。 これをネストしていた分繰り返すと…

<?php
foreach($items as $item){
  if($item != "条件1"){
    except1();
    allways_do();
    continue;
  }

  if($item != "条件2"){
    except2();
    allways_do();
    continue;
  }
  if($item != "条件3"){
    except3();
    allways_do();
    continue;
  }

  dosomething();
  allways_do();
}

見にくかった3重の処理が見やすくなります。