Php 在数组中检查非假值

Php 在数组中检查非假值,php,Php,如何严格检查数组中是否至少有一个非false(string、true、int)值仅用于in_数组或任何不用于foreach的值 $array = array( 'vegs' => 'tomatos', 'cheese' => false, 'nuts' => 765, '' => null, 'fruits' => 'apples' ); var_dump(in_array(false, $array, true)); //

如何严格检查数组中是否至少有一个非false(string、true、int)值仅用于in_数组或任何不用于foreach的值

$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

下面的实际解决方案

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

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
当然,如果数组根本不包含任何元素,也会出现这种情况,因此您需要:

var_dump(!in_array(false, $array, true));
编辑:算了吧,这是“数组只包含不完全为假的值”的答案,而不是“数组至少包含一个不完全为假的值”

实际解决方案:

var_dump(!in_array(false, $array, true) && count($array));
当然,如果在
if
子句中使用,也可以省略对
bool
的强制转换

如何严格检查是否至少有一个非false(字符串, true,int)数组中的值,仅使用in_数组或任何值,但不使用 弗雷奇

这是不可能的,因为:

  • 字符串:此数据类型可以包含任何值,它不像布尔值(true或false)或NULL
  • INT:与字符串相同,如何检查未知项
  • 布尔值:可能
  • 空:可能
那么,仅仅使用抽象(INT)或(STRING)就无法找到INT和STRING数据类型

编辑:

结果:

function get_type($v)
{
    return(gettype($v));
}

$types = array_map("get_type", $array);

print_r($types);

为什么只限于in_array();这是array_reduce()anything but not foreach的完美用法。为了更明确,我编辑了:“如何严格检查数组中是否至少有一个非false(string,true,int)值”。那就用吧!在_数组中(false,$array,true)-这是不可能的。当所有值均为非false时返回true我无法测试它,但在_数组中(true,$array,true)会执行此任务吗?它在计算true时是否检查任何“非false”值,或者它是否必须是
true
boolean?fab:我认为您也可以从doc中删除回调函数“function($value){return$value!==false;}”:如果没有提供回调,则所有输入项都等于false(请参阅转换为boolean)将被删除。使用_数组中的
是不可能的,对。但这并不是问题的全部。
var_dump(
  (bool) array_filter($array, function($value) { return $value !== false; })
);
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
)