ЛЕГКО! Но какое условное утверждение работает - PullRequest
0 голосов
/ 29 марта 2011

Просто, но это всегда беспокоило меня.Каков наилучший способ выражения условия?

$foo = '1';

if($foo === '1' || $foo === '2' || $foo === '3')
{
// foo matches 
}

or 

if($foo === '1' || '2' || '3')
{
// foo matches
}

Какой шаг работает и лучше.есть ли лучшее решение?

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

Вторая версия всегда будет иметь значение true.

Если вы хотите сжать сравнение с несколькими альтернативами, используйте:

if (in_array($foo, array('1', '2', '3') )) {

Если вы хотите точно сопоставить точное сравнение ===, вам, однако, потребуется:

if (is_string($foo) && in_array($foo, array(...))) {
2 голосов
/ 29 марта 2011

Это альтернатива:

if($foo>0 && $foo<4){

}
2 голосов
/ 29 марта 2011
$foo = 1;

if(in_array($foo, array(1, 2, 3))){
    //foo matches 
}
1 голос
/ 29 марта 2011

Второе, если заявление не сработает.PHP не работает так.Любое число, отличное от 0 (включая отрицательные), оценивается как истинное, если оно находится в условии if.Вот почему вы можете сделать что-то вроде if(count($array)), не указывая, что count($array) должно быть больше 0.

Было бы так же, как если бы вы сказали:

if($foo === 1)
{}
elseif(2)  //This will always trigger if $foo !== 1.  
{}
elseif(3)  //This will never trigger because of the last one
{}

Каждое условиеэто собственное самодостаточное состояние.Вместо того, чтобы читать это как просто «или» или «и» читать как «или если» и «и если».Так что if $foo is 1 or if 2 or if 3 вместо if $foo is 1 or 2 or 3

Если это просто цифра, то решение amosrivera является лучшим.Если это для других типов данных, то у webarto / mario есть хорошее решение.

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