$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
Run Code Online (Sandbox Code Playgroud)
如何严格检查数组中是否至少有一个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
Run Code Online (Sandbox Code Playgroud)
实际解决方案如下
只是把否定放在正确的位置:
var_dump(!in_array(false, $array, true));
Run Code Online (Sandbox Code Playgroud)
当然,如果数组根本不包含任何元素,那也是如此,所以你想要的是:
var_dump(!in_array(false, $array, true) && count($array));
Run Code Online (Sandbox Code Playgroud)
编辑:忘掉它,这就是"数组只包含不完全错误的值"的答案,而不是"数组包含至少一个不完全错误的值"
实际解决方案
var_dump(
0 < count(array_filter($array, function($value) { return $value !== false; }))
);
Run Code Online (Sandbox Code Playgroud)
array_filter返回一个包含所有值的数组!== false,如果它不为空,则表示条件为真.
或者根据评论中的建议进行简化:
var_dump(
(bool) array_filter($array, function($value) { return $value !== false; })
);
Run Code Online (Sandbox Code Playgroud)
当然,bool如果在if子句中使用,也可以省略强制转换.