$array = array(
'vegs' => 'tomatos',
'cheese' => false,
'nuts' => 765,
'' => null,
'fruits' => 'apples'
);
var_dump(in_array(false, $array, true)); //returns true because there is a false value
如何严格检查数组中是否至少有一个NON-false(字符串,true,int)值仅使用in_array或者不是foreach?
var_dump(in_array(!false, $array, true)); //this checks only for boolean true values
var_dump(!in_array(false, $array, true)); //this returns true when all values are non-false
答案 0 :(得分:7)
以下实际解决方案
将否定放在正确的位置:
var_dump(!in_array(false, $array, true));
当然,如果数组根本不包含任何元素,那么这也是正确的,所以你想要的是:
var_dump(!in_array(false, $array, true) && count($array));
编辑: 忘掉它,这就是“数组包含仅值并非完全错误”的答案,而不是“数组包含” 至少一个值并非完全错误“
实际解决方案:
var_dump(
0 < count(array_filter($array, function($value) { return $value !== false; }))
);
array_filter
返回一个数组,其中包含!== false
的所有值,如果它不为空,则表示条件为真。
或根据评论中的建议进行简化:
var_dump(
(bool) array_filter($array, function($value) { return $value !== false; })
);
当然,如果在bool
子句中使用,也可以省略对if
的强制转换。
答案 1 :(得分:0)
如何严格检查是否存在至少一个NON-false(字符串, 数组中的true,int)值仅使用in_array或任何但不是 的foreach?
这是不可能的,因为:
然后,使用abstract(int)或(string)找不到INT和STRING数据类型!
编辑:
function get_type($v)
{
return(gettype($v));
}
$types = array_map("get_type", $array);
print_r($types);
结果:
Array
(
[vegs] => string
[cheese] => boolean
[nuts] => integer
[] => NULL
[fruits] => string
)