I need to check if all values in an array equal the same thing.
For example:
$allValues = array(
\'true\',
\'true\',
\'true\',
);
$x = 0;
foreach ($allvalues as $a) {
if ($a != $checkvalue) {
$x = 1;
}
}
//then check against $x
if ($x != 0) {
//not all values are the same
}
If your array contains actual booleans (or ints) instead of strings, you could use array_sum:
$allvalues = array(TRUE, TRUE, TRUE);
if(array_sum($allvalues) == count($allvalues)) {
echo 'all true';
} else {
echo 'some false';
}
http://codepad.org/FIgomd9X
This works because TRUE
will be evaluated as 1
, and FALSE
as 0
.
Another option:
function same($arr) {
return $arr === array_filter($arr, function ($element) use ($arr) {
return ($element === $arr[0]);
});
}
Usage:
same(array(true, true, true)); // => true
Why not just compare count after calling array_unique()
?
To check if all elements in an array are the same, should be as simple as:
$allValuesAreTheSame = (count(array_unique($allvalues)) === 1);
This should work regardless of the type of values in the array.
Also, you can condense goat's answer in the event it's not a binary:
if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') {
// ...
}
to
if (array_unique($allvalues) === array('foobar')) {
// all values in array are "foobar"
}
You can compare min and max... not the fastest way ;p
$homogenous = ( min($array) === max($array) );