使用php检查值是否是数组中唯一的东西

时间:2018-11-16 15:30:51

标签: php arrays

我有一个看起来像这样的数组...

Array
(
    [0] => red
    [1] => red
    [2] => red
)

我正在尝试检查 red 是否是数组中唯一的东西,如果数组看起来像这样,我希望它失败...

Array
(
    [0] => red
    [1] => yellow
    [2] => red
)

7 个答案:

答案 0 :(得分:2)

使用array_unique(),您可以计算返回的事件数。如果其> 1,您还没有全部变红

<?php
$array = ['red','red','red'];

if ( count(array_unique($array)) == 1 && array_unique($array)[0] == 'red' ) {
    echo 'all red';
} else {
    echo 'error';
}

答案 1 :(得分:1)

您可以这样做:

$array = [
    'foo',
    'foo',
    'foo'
];

$values = array_count_values($array);
$count = count($array);

if (!empty($values['foo']) && $count === $values['foo']) {
    echo 'all array values match foo';
} else {
    echo 'foo not found in array';
}

这里我们计算数组中的值与数组的总数

编辑唯一的问题是,您必须知道要与之进行比较的值才能获得结果

编辑2 :解决了MickMackusa提出的问题:

  

另一个问题是,如果您要查找的值根本不在输入数组中,则它不会作为键存在于$ values数组中,因此您的代码将生成通知。 ...不好。

答案 2 :(得分:1)

使用count()array_filter()的组合来查找数组中不需要的项目数。

$invalidItems = count(array_filter($arr, function($item){
    return $item != 'red';
}));

if ($invalidItems)
    echo 'invalid';
else    
    echo 'valid';

demo中查看结果

答案 3 :(得分:1)

您可以使用array_unique()删除重复项,然后计算剩余列表的大小,然后还可以检查1值是否等于您的期望值...

$unique = array_unique($a);
if ( count($unique) == 1 && $unique[0] == 'value' ) {

}

答案 4 :(得分:1)

您不需要多个函数调用来检查是否存在非红色值。以下检查是否有任何非红色元素。

代码(Demo

$array = ['red','red','red'];
var_export(!array_diff($array, ['red']));  // true
echo "\n";
var_export(!array_filter($array, function($v){return $v !== 'red';}));  // true

$array = ['red','yellow','red'];
var_export(!array_diff($array, ['red']));  // false
echo "\n";
var_export(!array_filter($array, function($v){return $v !== 'red';}));  // false

我认为array_filter()是一种更“直接”的技术,但是array_diff()不需要自定义功能,因此可以说更易于阅读。

如果您的编码逻辑必须要求存在red并取消包含非红色元素的数组的资格,则只需添加一个条件即可检查该数组是否包含任何元素。 (more precise demo


为了获得最佳性能,请使用带有中断的循环-这样,除非绝对必要,否则不必迭代整个数组。早期的break是一件好事。 Demo

$array = ['red','yellow','red'];
$result = true;
foreach ($array as $value) {
    if ($value != 'red') {
        $result = false;
        break;
    }
}

答案 5 :(得分:0)

检查是否有red,然后删除重复的值并检查是否只有一个:

if(in_array('red', $array) && (count(array_unique($array)) == 1)) {
    // yes
}

答案 6 :(得分:0)

每个(全部)红色或已死的旧学校:

<?php
$things = ['red', 'white', 'blue'];
foreach($things as $colour)
    if ($colour !== 'red')
        throw new Exception('dead');