У меня есть цикл foreach
внутри другого цикла foreach
в виде этого кода:
foreach($array1 as $uid => $somevalues) {
$status = true;
foreach($somevalues as $somevalue)
if(!isset($somevalue->$someothervalue))
$status = false;
if($status) {
$content .= "some content added";
$count++;
}
}
Как это работает
Как видите, я перебираю все записи в $array1
. Для каждой записи я перебираю содержащийся в ней массив $somevalues
в поисках определенного условия (там существует $someothervalue
). Теперь, если это условие (что-то isset
) неверно, то $status
меняется на false
.
Только если $status
все еще верно после всех циклов внутреннего foreach
, я хочу, чтобы было выполнено какое-то действие (некоторое содержимое добавлено в текстовую строку $content
и повышенный счетчик).
Цель
Массивы, с которыми я работаю, могут быть довольно большими, и я рассматривал команды break
и continue
, чтобы попытаться пропустить ненужные части, чтобы улучшить код и сократить количество циклов выполнения скрипта.
Как видите, если цикл из внутреннего foreach
приводит к $status=false
, то мы можем остановить его прямо здесь (дальнейшие циклы здесь не нужны). break
подходит для того, чтобы пропустить остальные forearch
петель.
Если это так, то мы также можем пропустить оставшуюся часть текущего внешнего цикла из внешнего foreach
, поскольку теперь не будет выполняться никакой код, поскольку $status
равен false
. Для этой цели была бы полезна команда continue
, позволяющая пропустить оставшуюся часть текущего внешнего цикла и сразу перейти к следующей строке массива.
Вопрос
Я смотрел на командные строки break 2
и continue 2
, например. которые позволяют пропустить текущий И внешний цикл (на два шага вверх) с соответствующими результатами (либо полностью остановить цикл, либо пропустить оставшуюся часть текущего цикла). Они работают как двойной разрыв — как «break break
» — и как двойное продолжение — как «continue continue
» — соответственно.
Но здесь мне нужно что-то вроде break continue
, если вы меня понимаете. Первый цикл должен break
, следующий должен continue
. Я пытаюсь избежать использования оператора if
в коде, если в этом нет необходимости. Проверка уже сделана, и это похоже на ненужную двойную проверку.
Надеюсь вопрос ясен. Есть ли для этой цели метод двойного пропуска изнутри внутреннего foreach
, но с эффектом двух разных команд break continue
?