Выйдите из системы и пропустите следующие циклы

64
6

Я ищу элемент в нескольких циклах while, но если элемент найден, мне не нужно проверять следующие циклы. Как я могу добиться чего-то подобного?

while(something) {
if (this = key) {
// break this loop and skip the next ones. Otherwise proceed to next.
}
}

while(somethingelse) {
if (this = key) {
// break this loop and skip the next ones. Otherwise proceed to next.
}
}

while(somethingthird) {
if (this = key) {
// break this loop and skip the next ones. Otherwise stop looking.
}
}

спросил(а) 2021-01-19T15:47:07+03:00 8 месяцев назад
1
Решение
90

Используйте переменную (boolean), которая знает, было ли ваше условие проверено в предыдущее время, например:

$breakAll = false; //default false
while(something) {
if (this = key) {
// break this loop and skip the next ones. Otherwise proceed to next.
$breakAll = true; //now break all whiles
}
}

while(somethingelse && !breakAll) {
if (this = key) {
// break this loop and skip the next ones. Otherwise proceed to next.
$breakAll = true; //same here
}
}

while(somethingthird && !breakAll) {
if (this = key) {
// break this loop and skip the next ones. Otherwise stop looking.
}
}

ответил(а) 2021-01-19T15:47:07+03:00 8 месяцев назад
78

Рефакторинг циклов while для функции и возврата при обнаружении элемента


function doSomething() {
while(something) {
if (this == key) {
return;
}
}

while(somethingelse) {
if (this == key) {
return;
}
}

while(somethingthird) {
if (this == key) {
return;
}
}
}

ответил(а) 2021-01-19T15:47:07+03:00 8 месяцев назад
46

Использовать функцию

function findSpecificElement($element)
{
while ($something) {
if ($something == $element) {
return $something;
}
}

while ($something) {
if ($something == $element) {
return $something;
}
}

...
}

ответил(а) 2021-01-19T15:47:07+03:00 8 месяцев назад
46

Правильнее использовать php-оператор: продолжить, см.

http://php.net/manual/en/control-structures.continue.php

Пример:

while (list($key, $value) = each($arr)) {
if (!($key % 2)) { // skip even members
continue;
}
do_something_odd($value);
}

Оператор: break; - разбить петлю http://php.net/manual/en/control-structures.break.php

while(something) {
if (this == key) {
break;
}
}

ответил(а) 2021-01-19T15:47:07+03:00 8 месяцев назад
-5

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

while(something) {
if (this = key) {
goto yourDoom; // Breaks out of loop and goes to label "yourDoom"
}
}
while(somethingelse) {
if (this = key) {
goto yourDoom; // Breaks out of loop and goes to label "yourDoom"
}
}
while(somethingthird) {
if (this = key) {
goto yourDoom; // Breaks out of loop and goes to label "yourDoom"
}
}
yourDoom: // This is a label that you can go to
// Do something

ответил(а) 2021-01-19T15:47:07+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема