Альтернатива «Продолжить», которая не пропускает, а повторяет цикл - PullRequest
0 голосов
/ 03 апреля 2012

Я использую PHP foreach(). Иногда, когда внутренний код не выполняет то, что я хочу, я бы хотел повторить попытку того же уровня, а не переходить к следующему.

Это возможно?

Пример:

foreach($pics AS $pic){
  if(!upload($pic)){
    again; // something like this
  }
}

Ответы [ 3 ]

5 голосов
/ 03 апреля 2012

Нет, но вы можете поместить цикл while внутри вашего цикла, это поведение будет аналогично тому, что вы хотели выше. Однако вы должны изменить его так, чтобы он использовал счетчик и останавливался после X повторных попыток, чтобы предотвратить бесконечный цикл.

foreach($pics AS $pic){
  while(!upload($pic));
}
0 голосов
/ 03 апреля 2012
function dosomething() {
    foreach($pics AS $pic){
        if(!upload($pic)){
            break;
        }
    }
    $success = true;
}

$success=false;
while( !$success ) dosomething();

Пока это в теории должно работать.Я бы сказал, что абсолютно плохая практика программирования, так как у вас есть хорошие шансы на бесконечный цикл.

0 голосов
/ 03 апреля 2012

Вам нужно будет окружить ваш if другим циклом, который повторяется определенное количество раз (ваш максимальный счетчик повторов), или до тех пор, пока вы вручную break не выйдете из него, когда ваш код выполнится успешно.

Вы могли бы использовать goto Полагаю, но это, как правило, осуждается и в любом случае будет делать то же самое, что и внутренний цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...