3

配列をループしていて、ループの途中で小さな問題を発見した場合、...何かを変更して、もう一度やり直す必要があります...に戻る方法はありますか配列から次の値を取得せずにループの先頭に?

continueこれが存在するとは思えませんが、 orのようなキーワードになりますbreak。実際にはcontinue、次のアイテムを取得しないことを除いて、 によく似ています。メモリにあるものを維持します。

何も存在しない場合、ループ内の次のキー/値になるような方法で配列に何かを挿入できますか?

多分これは while(array_shift())... で簡単になるでしょう...

または、ループ内の再帰関数が機能する可能性があると思います。

さて、これを入力するにつれて私の質問は進化しているので、この疑似コードを確認してください。

foreach($storage_locations as $storage_location) {
    switch($storage_location){
        case 'cookie':
            if(headers_sent()) {
                // cannot store in cookie, failover to session
                // what can i do here to run the code in the next case?
                // append 'session' to $storage_locations?
                // that would make it run, but other items in the array would run first... how can i get it next?
            } else {
                set_cookie();
                return;
            }
        break;

        case 'session':
            set_session();
            return;
        break;
    }
}

スイッチの途中でテストされた値を変更するキーワードはないと確信しています...では、このコードをリファクタリングしてフェイルオーバーを取得するにはどうすればよいですか?

4

1 に答える 1

17

ではなくforeach、より手動の配列反復を使用します。

while (list($key, $value) = each($array)) {
    if (...) {
        reset($array); // start again
    }
}

http://php.net/each
http://php.net/reset

ただし、単純なフォールスルーでうまくいくようです:

switch ($storage_location) {
    case 'cookie':
        if (!headers_sent()) {
            set_cookie();
            break;
        }

        // falls through to next case

    case 'session':
于 2012-11-14T15:50:07.430 に答える