我有一个看起来像这样的数组...
Array
(
[0] => red
[1] => red
[2] => red
)
我正在尝试检查 red 是否是数组中唯一的东西,如果数组看起来像这样,我希望它失败...
Array
(
[0] => red
[1] => yellow
[2] => red
)
答案 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');