in_array检查非错误值

时间:2013-02-12 16:37:49

标签: 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

如何严格检查数组中是否至少有一个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

2 个答案:

答案 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?

这是不可能的,因为:

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

然后,使用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
)