2012/02/27

【PHP】ループ中のswitchでcontinueしたときにはまった

今日ハマったのでメモ

まず、今日まで知らなかったのですが、PHPにおいて
switchはループ構造らしいです。

ですので、switch中のcontinueはすべてbreakと同じ扱いになります。
つまり、下記の例では

<?php

$list = array(
    '1', '2', '3', '4',
);

foreach ($list as $num)
{
    switch ($num)
    {
        case 1:
            continue;
        default:
            break;
    }

    echo $num . "\r\n";
}
このように出力されます。
1
2
3
4
switch内にて1が来た場合ループに戻るように と書いていますが、これだとただ単にbreakするのと 一緒になります。 ですので、ループに戻りたい際は下記のように記述します。
<?php

$list = array(
    '1', '2', '3', '4',
);

foreach ($list as $num)
{
    switch ($num)
    {
        case 1:
            continue 2;
        default:
            break;
    }

    echo $num . "¥r¥n";
}
これでなぜ、ループに戻ることができるのかというと、continueには 戻る階層を指定することができます。 ですので、下記記述ですと、2階層戻ることになりループに戻ることができます。
continue 2;
終わり 参考: PHP: switch - Manual

0 件のコメント:

コメントを投稿