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

如何严格检查数组中是否至少有一个非假(字符串,真,整数)值,仅使用 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
4

2 回答 2

10

下面的实际解决方案

只需将否定放在正确的位置:

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

于 2013-02-12T16:44:57.753 回答
0

如何严格检查数组中是否至少有一个非假(字符串,真,整数)值,仅使用 in_array 或任何但不使用 foreach?

这是不可能的,因为:

  • 字符串:此数据类型可以包含任何值,它不像布尔值(true 或 false)或 NULL。
  • INT:与字符串相同,如何检查未知数?
  • 布尔值:可能。
  • 空:可能。

那么,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
)
于 2013-02-12T17:01:37.020 回答