检查php数组中是否存在两个不同的值

时间:2011-10-13 02:19:19

标签: php arrays

假设我有一个php数组,可以是全1,全2或全1和2。例如,我可以array(1, 1, 1, 1, 1, 1)array(2, 2, 2, 2, 2, 2)array(2, 2, 1, 1, 2, 1)

如何检查我的数组是否实际上是一个包含所有1的数组,全部是2还是我的数组实际上同时包含1和2?

10 个答案:

答案 0 :(得分:5)

如果您想知道PHP,可以使用array_unique()来探测存在哪些不同的值:

 if (count(array_unique($array)) == 1) {
     // It's either full of 1s or 0s.
     // Then just probe the first entry.
 }

答案 1 :(得分:2)

您可以将数组中的所有值一起添加。如果它们等于数组的长度或等于0,则它们都是1或全0。

答案 2 :(得分:1)

最简单的方法是计算1和0的数量。例如(在python中):

ones = zeroes = 0;
for i in range(len(my_array)):
    if my_array[i] == 1: ones = ones + 1
    else zeroes = zeroes + 1

您还可以将每个元素相乘(如果所有元素都为1)并添加数组中的每个元素(如果所有元素都为零,则为0)

答案 3 :(得分:0)

在Java中......

public static void allTheSame(int[] array) {
  for (int i = 1; i < array.length; i++) {
    if (array[i] != array[i - 1]) {
       return false;
    }
  }
  return true;
}

此算法可以转录为其他列出的语言,尽管它们可能是更简洁的方法。 (但要注意整洁解决方案的效率......如果这对您的应用很重要。)

请注意,此方法将比任何涉及整理或求和数组元素的整洁解决方案更快地提供false结果,并且不会假设元素值是什么。


注意:这个答案是在标记表明OP需要Java,Javascript和PHP解决方案时编写的。查看问题的编辑记录...

答案 4 :(得分:0)

您可以使用简单的if-statement来完成此操作。这是一些JavaScript:

if (myArray.indexOf(1) > -1) {
  // there are 1s, are there 0s?
  if (myArray.indexOf(0) > -1) {
    console.log("1s and 0!");
  } else {
    console.log("Only 1s.");
  }
} else {
  console.log("Only 0s.");
}

工作示例:http://jsfiddle.net/daNEH/

答案 5 :(得分:0)

试试这段代码:

    int[] intArray = new int[5];

    boolean hasZero, hasOne, hasBoth;

    for(int integer : intArray)
    {
        switch(integer)
        {
        case 0:
            hasZero = true;
            break;
        case 1:
            hasOne = true;
            break;
        }
    }

    hasBoth = hasZero && hasOne;

答案 6 :(得分:0)

function allElementsEqual(array){
    var start = array[0],
        same = true;
    for(i = 1;i < array.length;i++){
       same &= (start === array[1]);
    }
    return same;
}

此功能应该可以正常工作http://jsfiddle.net/WNxg4/

答案 7 :(得分:0)

另一种方法是使用array_diff,前提是您只有两个不同的数字。只需将数字的草堆与具有单个数字的数组进行比较(选择干草堆中的一个)。

例如:

$haystack_mixed = array(2,2,2,1,1);
$haystack_1 = array(1,1,1,1);
$haystack_2 = array(2,2,2,2);

print_r(array_diff($haystack_mixed, array(1))); 
// The result is not the same as the $haystack since there are 1's in it.
// Array ( [0] => 2 [1] => 2 [2] => 2 )

print_r(array_diff($haystack_1, array(1)));
// This one is made up of all 1's
// Array ( )

print_r(array_diff($haystack_2, array(1))); 
// This one is made up of all 2's (same length as $haystack_2)
// Array ( [0] => 2 [1] => 2 [2] => 2 [3] => 2 )

所以你可以测试结果数组的长度。

答案 8 :(得分:0)

我认为您可以使用array_sum或array_filter函数。

答案 9 :(得分:0)

我已经阅读了9个答案并且它们都非常漂亮,我认为只是采用最简单的方法。

is_mixed($array){
    $count = count($array);
    //we go trough every element in the array
    for($i=1;$i<$count;$i++){
        //if the element n is distinct from the n-1
        //then return true (is_mixed)
        if ($array[$i] != $array[$i-1]) return true;
    }
    //if it didn't return anything yet, it means
    //all the elements are the same. Then, just
    //return the first one, as they're all the same
    // (either 1 or 2)
    return $array[0];
}

我真正最喜欢的第二个:

function what_they_are($array){
    $total = array_sum($array);
    $count = count($array);

    if ($total == 0) {
        return "they're all 0";
    }else if ($total/$count == 2){
        return "they're all 2";
    }else if ($total == $count){
        return "they're all 1";
    }else{
        return "they're mixed";
    }
}