in_array检查非错误值

iht*_*tus 7 php

$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)

Fab*_*ler 8

实际解决方案如下

只是把否定放在正确的位置:

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子句中使用,也可以省略强制转换.