Проверьте, все ли значения в массиве одинаковы

Мне нужно проверить, все ли значения в массиве равны.

Например:

$allValues = array(
'true',
'true',
'true',
);

Если каждое значение в массиве равно 'true' тогда я хочу повторить 'all true', Если любое значение в массиве равно 'false' тогда я хочу повторить 'some false'

Есть идеи о том, как я могу это сделать?

43

Решение

все значения равны тестовому значению

if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') {


}

или просто проверить на наличие того, что вы не хотите.

if (in_array('false', $allvalues, true)) {

}

Предпочитайте последний метод, если вы уверены, что в массиве может быть только 2 возможных значения, так как он намного эффективнее. Но если вы сомневаетесь, медленная программа лучше, чем неправильная, так что используйте первый метод.

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

function isHomogenous($arr) {
$firstValue = current($arr);
foreach ($arr as $val) {
if ($firstValue !== $val) {
return false;
}
}
return true;
}

* примечание — некоторые ответы интерпретируют исходный вопрос как 1) how to check if all values are the sameв то время как другие интерпретировали это как 2) how to check if all values are the same AND make sure that value equals the test value, Решение, которое вы выбираете, должно учитывать эту деталь. Мои первые 2 решения ответили # 1. мой isHomogenous() функция отвечает # 2, хотя вы можете изменить его, чтобы ответить # 1, передав значение $firstValue в качестве тестового значения, вместо использования первого значения, найденного в массиве, как я сделал.

104

Другие решения

Если в вашем массиве вместо строк содержатся действительные логические значения (или целые числа), вы можете использовать array_sum:

$allvalues = array(TRUE, TRUE, TRUE);
if(array_sum($allvalues) == count($allvalues)) {
echo 'all true';
} else {
echo 'some false';
}

http://codepad.org/FIgomd9X

Это работает, потому что TRUE будет оцениваться как 1, а также FALSE как 0,

11

Кроме того, вы можете сжать ответ козла, если он не двоичный:

if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') {
// ...
}

в

if (array_unique($allvalues) === array('foobar')) {
// all values in array are "foobar"}
8

Почему бы просто не сравнить счет после звонка array_unique()?

Чтобы проверить, все ли элементы в массиве одинаковы, должно быть так же просто, как:

$allValuesAreTheSame = (count(array_unique($allvalues)) === 1);

Это должно работать независимо от типа значений в массиве.

6

Вы можете сравнить мин и макс … не самый быстрый способ; р

$homogenous = ( min($array) === max($array) );
3
$alltrue = 1;
foreach($array as $item) {
if($item!='true') { $alltrue = 0; }
}
if($alltrue) { echo("all true."); }
else { echo("some false."); }

Технически это не проверяет «некоторые ложные», это проверяет «не все верно». Но, похоже, вы уверены, что единственные значения, которые вы получите, это «true» и «false».

0

Другой вариант:

function same($arr) {
return $arr === array_filter($arr, function ($element) use ($arr) {
return ($element === $arr[0]);
});
}

Использование:

same(array(true, true, true)); // => true
0
$x = 0;
foreach ($allvalues as $a) {
if ($a != $checkvalue) {
$x = 1;
}
}

//then check against $x
if ($x != 0) {
//not all values are the same
}
-3
По вопросам рекламы [email protected]