29

在以下关联数组中

$array = array(
    [0] => 0
    [1] => 1
    [2] => 
    [3] => 2
    [4] => 
)

如何确定给定键是否具有空(或 null)值?我用了

if(empty($array[$value])) 

if(isset($array[$value])) && $array[$value] !=='')

使用时,empty我还获得false了第一个数组值,该值为零并且 isset似乎不起作用。

4

6 回答 6

37

使用array_key_exists()is_null()为此。TRUE如果键存在并且值远离,它将返回NULL

区别:

$arr = array('a' => NULL);

var_dump(array_key_exists('a', $arr)); // -->  TRUE
var_dump(isset($arr['a'])); // -->  FALSE

所以你应该检查:

if(array_key_exists($key, $array) && is_null($array[$key])) {
    echo "key exists with a value of NULL";
}
于 2013-05-09T19:54:24.323 回答
22

看了所有的答案,我不喜欢他们。这不是更简单更好吗?这就是我正在使用的:

  if (in_array(null, $array, true) || in_array('', $array, true)) {
    // There are null (or empty) values.
  }

请注意,将第三个参数设置为 true 意味着严格比较,这意味着 0 不会等于 null - 但是,空字符串 ('') 也不会 - 这就是我们有两个条件的原因。不幸的是 in_array 中的第一个参数必须是一个字符串,并且不能是一个值数组。

于 2014-10-31T06:54:59.337 回答
5

PHP返回值状态:

如果 var 存在并且具有非空、非零值,则返回 FALSE。否则返回 TRUE。

以下内容被认为是空的:

""(一个空字符串)

0(0 为整数)

0.0(0 作为浮点数)

"0" (0 作为字符串)

无效的

错误的

array() (一个空数组)

$var; (声明的变量,但没有值)

从您的数组示例中,我将其视为您想将0 排除为整数。如果是这种情况,这将起到作用:

<?php
    $array = array(0, 1, '', 2, '');

    foreach ($array as $value) {
        echo (empty($value) && 0 !== $value) ? "true\n" : "false\n";
    }

如果您想排除其他empty考虑在该条件下否定它们的条件。考虑到如果您想检查其他值,这可能不是最佳解决方案。

于 2013-05-09T20:04:40.917 回答
2
if ( !isset($array[$key]) || $array[$key] == "" || is_null($array[$key]) )
{
    //given key does not exist or it has "" or NULL value
}
于 2013-05-09T20:08:35.047 回答
1
foreach($array as $i => $v) {
    if(null === $v) {
        // this item ($array[$i]) is null
    }
}

...或者,对于给定的键:

if(null === $array[2]) {
     // this item ($array[2]) is null
}
于 2013-05-09T19:55:14.400 回答
1

如果我知道数组是如何构造的,这可能会更干净,但是,假设您可以在数组中同时包含空字符串或空值,并且您想要考虑 0 的值 --> 这就是我想要的做:

if (is_null($array[$key]) || (string)$array[$key] == '')

这是一些测试代码,显示了它与一个同时具有 0、null、空字符串和非零整数的数组的作用......

$array = array(0,1,null,2,'');
print_r($array);

foreach ($array as $key => $val) {
         if (is_null($array[$key]) || (string)$array[$key] == '') {
           echo $key.", true\n";
         }
}

至于使用 isset() - 考虑设置一个空字符串。这可能是您遇到的情况(除了 0 被认为是空的)与此用法比较:

$foo = array(0,1,null,2,'');

print_r($foo);
foreach ($foo as $key => $val) {
        if (isset($foo[$key])) {
                echo $key.", true\n";
        }
}
于 2013-05-09T20:13:19.397 回答