检查数组中的所有值是否相同

时间:2012-05-12 02:48:48

标签: php arrays

我需要检查数组中的所有值是否相同。

例如:

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

如果数组中的每个值都等于'true',那么我想回显'all true'。如果数组中的任何值等于'false',那么我想回显'some false'

我对如何做到这一点有任何想法?

8 个答案:

答案 0 :(得分:107)

所有值都等于测试值:

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


}

或只是测试你不想要的东西的存在:

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

}

如果您确定阵列中只有2个可能的值,则更喜欢后一种方法,因为它更有效。但如果有疑问,慢程序比不正确的程序更好,所以使用第一种方法。

如果你不能使用第二种方法,你的数组非常大,并且数组的内容可能具有多于1的值(特别是如果该值可能发生在附近)在数组的开头),执行以下操作可能很多

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

注意:有些答案将原始问题解释为(1)如何检查所有值是否相同,而其他答案则将其解释为(2)如何检查所有值是否相同< strong>和确保该值等于测试值。您选择的解决方案应该注意这一细节。

我的前2个解决方案回答了#2。我的isHomogenous()函数回答#1,虽然您可以通过传递$firstValue的值作为测试值来修改它来回答#2,而不是像我那样使用数组中找到的第一个值。

答案 1 :(得分:12)

如果您的数组包含实际的布尔值(或整数)而非字符串,则可以使用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

答案 2 :(得分:10)

另外,如果山羊的答案不是二元的话,你可以压缩山羊的答案:

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

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

答案 3 :(得分:7)

为什么不在调用array_unique()后比较计数?

要检查数组中的所有元素是否相同,应该如下所示:

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

无论数组中的值类型如何,这都应该有效。

答案 4 :(得分:4)

你可以比较最小和最大......不是最快的方法; p

$homogenous = ( min($array) === max($array) );

答案 5 :(得分:0)

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

从技术上讲,这不会测试“某些错误”,它会测试“并非所有都是真的”。但听起来你很确定你得到的唯一价值是“真实”和“虚假”。

答案 6 :(得分:0)

另一种选择:

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

用法:

same(array(true, true, true)); // => true

答案 7 :(得分:-3)

$x = 0;
foreach ($allvalues as $a) {
   if ($a != $checkvalue) {
      $x = 1;
   }
}

//then check against $x
if ($x != 0) {
   //not all values are the same
}