2011年10月15日土曜日

while,for,foreachの中のswitchでcontinueすると・・

foreach文の中でswitchを使った時の失敗。
以下のようなコードを書きました。

foreach ($ary as $key=>$val) {
    switch ($key) {
        case 'aa':
            continue;
            break;

        default:
            break;
    }
    $val =  ......
    .......
}

思惑としては、$keyの値が'aa'だった時だけforeachの次のループに行きたい・・というものでした。
ところが、$keyが'aa'の時でもそのまま次へ行かずにforeach文を実行していました。

そういえばbreakで多重のループを抜ける時は break 2;とかしてたなと思って、continue 2; とすると思った動作になりました。

foreach ($ary as $key=>$val) {
    switch ($key) {
        case 'aa':
            // switchをbreakしてforeachにcontinueする
            continue 2;
            break;

        case 'bb':
            // break 2とするとswitchとforeachを飛ばせる
            break 2;

        default:
            break;
    }
    $val =  ......
    .......
}


C言語か何かで同じような処理を書いた時は、switch内でcontinueしておけば次のループに行けたような記憶があったので、PHPでも大丈夫だと思ってました。

PHPのswitch内でのcontinueはbreakと同じ動作をするような感じですね。
習慣的にswitch文では全部にbreakを付けてるけど、continueが書いてあればbreakは不要かな。

0 件のコメント:

コメントを投稿