PHP: проверка, равны ли три переменные - PullRequest
37 голосов
/ 16 января 2011

Я никогда не сталкивался с этим раньше, но как бы вы проверили, являются ли три переменные одинаковыми?Следующее, очевидно, не работает, но я не могу придумать элегантный (и правильный) способ написать следующее:

if ($select_above_average === $select_average === $select_below_average) { }

Ответы [ 5 ]

59 голосов
/ 16 января 2011
if ((a == b) && (b == c)) {
   ... they're all equal ...
}

по переходному отношению

21 голосов
/ 16 января 2011
$values = array($select_above_average, $select_average, $select_below_average);

if(count(array_unique($values)) === 1) {
    // do stuff if all elements are the same
}

Был бы другой способ сделать это.

8 голосов
/ 16 января 2011
if ($select_above_average === $select_average
    && $select_average === $select_below_average) { }
5 голосов
/ 16 января 2011

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

Пример:

если ( a === b )

и если вы делаете несколько, то

if ( ( a === b ) && ( c === d ) )

Соп, если вы помните, что каждый набор скобок является проверочной проверкой, вы можете войти в систему следующим образом:

if ( (( a === b ) || ( c === d )) && ( e === f ) )

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

в третьем примере, приведенном выше, если a === b или c === d не пройден, тогда e === f никогда не будет проверяться, так как ab, cd обернуты в фигурные скобки, так что он возвращается и проверяется.

Надеюсь, это поможет вам немного больше.

1 голос
/ 19 мая 2014

У меня была уникальная ситуация, в которой мне нужно было посмотреть, было ли количество элементов в трех массивах таким же, как в этом сценарии.

Вот что я придумал:

(Предположим, что поля, операторы и значения являются массивами)

$allfieldscount = array(count($fields), count($operators), count($values)); //store an array of the count of all the arrays.

$same = array_count_values($allfieldscount);//returns an array by values in the array.  We are looking to see only 1 item in the array with a value of 3.

if(count($same) != 1){
    //Then it's not the same
}else{
   //Then it's the same
}

Эта тактика подсчитывает поля в разных массивах и, используя array_count_values, если они все одинаковые, тогда счетчик возвращаемого массива будет равен 1, если что-то еще, то это не то же самое. Посмотрите array_count_values ​​на php.net, чтобы понять, что он делает.

...