2014-04-30 2 views
1

У меня есть несколько рабочих петель в моей функции, но этот я просто не могу работать, как это должно быть. Я предположил, что while($variable == false) выйдет из цикла, как только произойдет $variable = true;. Вот голой вариант с двумя операторами внутри цикла.Пока Loop не ломается, когда условие встречается

$excluded = false; 
while($excluded == false): 
    $excluded = in_array(strtolower($extension), $GLOBALS['codexts']) ? true : false; 
    $excluded = $file != "." && $file != ".." ? false : true; 
    break; 
endwhile; 

Внутри цикла, первое определение действительно производит false, когда это предположить, но цикл не сломаться. Он переходит ко второму, который возвращает true. Если изменить второй к этому:

$excluded = $excluded ? $excluded : ($file != "." && $file != ".." ? false : true); 

... тогда я получаю результат я хочу, но только потому, что я исправляя за провал время цикла, чтобы сломать, когда $excluded сначала определяется как true , Что я делаю неправильно здесь?

UPDATE Я просто перечитать инструкцию, и, видимо, я пропустил эту часть:

Значение выражения проверяется каждый раз в начале цикла, так что даже если это значение изменяется в течение выполнение вложенных операторов, выполнение не прекратится до конца итерации

Именно поэтому итерации возвращались обратно к ложному. В конце концов, мне нужно делать ручные условные перерывы.

+0

Вы уверены, что он идет на второй цикл? В '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' –

+0

Отсутствие фигурных скобок ..... –

+0

Оператор break находится в конце цикла, чтобы покрыть те итерации, которые никогда не возвращаются true, поэтому цикл не застревает. Но я заверяю вас, что есть итерации, возвращающие true в первом утверждении, но не ведут себя так, как будто они верны, поэтому я знаю, что это происходит во втором утверждении. Разрыв в конце не является проблемой. –

ответ

2

попробовать

$excluded = false; 
while($excluded == false) { 
    $excluded = in_array(strtolower($extension), $GLOBALS['codexts']) ? true : false; 
    if ($excluded == true) { 
    break; 
    } 
    $excluded = $file != "." && $file != ".." ? false : true; 
    break; 
} 
?> 
+0

почему голос? –

+0

Мне потребовалась минута, чтобы понять, в чем разница. Фигурные скобки. Ну, я попробовал. Все еще не работает. Спасибо хоть. –

+0

BTW: Downvote был не мной. –

0

Q: Почему бы не использовать обычный синтаксис использования?

В: Почему избыточный «разрыв»?

В: Почему вы устанавливаете выражение дважды перед тестированием, и вам действительно нужно «?:» Здесь? Дважды???

В: Вы не можете упростить выражение, которое изменяет ваш флаг (изменяется «исключено»)?

SUGGESTION:

$myvar = false; 
while(!$myvar) { 
    $myvar = << something that sets/clears my flag >> 
} 
+0

В: Какая часть моего синтаксиса нетрадиционная? A: Оператор break находится в конце цикла, чтобы покрыть те итерации, которые никогда не возвращаются true, поэтому цикл не застревает. Это стандартный протокол. Это НЕ избыточно. В: Я не понимаю ваш третий вопрос: «Установка выражения дважды перед тестированием». –

+0

Это не намного проще, чем 'if in_array() true/false'. –

+0

И ваше предложение - это именно то, что я делаю уже. '! $ myvar' совпадает с' $ myvar == false', и я много раз пробовал '! $ excluded' перед публикацией здесь. –

Смежные вопросы