Matty
Matty

Reputation: 34533

PHP: Testing whether three variables are equal

I've never come across this before, but how would you test whether three variables are the same? The following, obviously doesn't work but I can't think of an elegant (and correct) way to write the following:

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

Upvotes: 48

Views: 38083

Answers (5)

Joseph Astrahan
Joseph Astrahan

Reputation: 9082

I had a unique situation in which I needed to see if the amount of items in three arrays was the same much like this scenario.

This is what I came up with:

(Assume that fields, operators and values are all arrays)

$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
}

This tactic counts the fields in the different arrays and by using array_count_values if they are all the same then the count of the array it returns will be '1', if it's anything else then it's not the same. Look up array_count_values on php.net to understand more what its doing.

Upvotes: 3

RobertPitt
RobertPitt

Reputation: 57268

you already have your answer by Adam but a good way to remember how to do this correctly is to remember for a single validation you should be wrapping in () braces, if your only doing one single check then you already have the braces provided by the if ( ) statement.

Example:

if ( a === b )

and if your doing multiple then

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

Sop if you remember that every set of braces is a validation check, you can have login like this:

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

if statements and many other logical operations work on hierarchy so that the amount of individual checks within a check has an effect on he parent check.

taking the third example above if a === b or c === d fails then e === f will never be checked as the ab,cd is wrapped in braces so that is returned and checked.

Hope this helps you a little more.

Upvotes: 6

Dogbert
Dogbert

Reputation: 222388

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

Upvotes: 10

Marc B
Marc B

Reputation: 360842

if ((a == b) && (b == c)) {
   ... they're all equal ...
}

by the transitive relation

Upvotes: 76

PeeHaa
PeeHaa

Reputation: 72709

$values = array($select_above_average, $select_average, $select_below_average);

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

Would be another way to do it.

Upvotes: 28

Related Questions