在以下关联数组中
$array = array(
[0] => 0
[1] => 1
[2] =>
[3] => 2
[4] =>
)
如何确定给定键是否具有空(或空)值?我用了
if(empty($array[$value]))
和
if(isset($array[$value])) && $array[$value] !=='')
使用empty
时,我的第一个数组值为false
为零,isset
似乎无法解决问题。
答案 0 :(得分:27)
使用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";
}
答案 1 :(得分:18)
看了所有答案,我不喜欢他们。这不是更简单也更好吗?它是我正在使用的:
if (in_array(null, $array, true) || in_array('', $array, true)) {
// There are null (or empty) values.
}
请注意,将第三个参数设置为true意味着严格比较,这意味着0将不等于null - 但是,也不会清空字符串('') - 这就是为什么我们有两个条件。不幸的是,in_array中的第一个参数必须是一个字符串,不能是值数组。
答案 2 :(得分:5)
PHP empty返回值状态:
如果var存在并且具有非空的非零值,则返回FALSE。否则返回TRUE。
以下内容被认为是空的:
“”(空字符串)
0(0为整数)
0.0(0作为浮点数)
“0”(0作为字符串)
NULL
FALSE
array()(一个空数组)
$变种; (声明的变量,但没有值)
从您的数组示例中我将其视为要将 0排除为整数。如果是这样的话就可以解决这个问题:
<?php
$array = array(0, 1, '', 2, '');
foreach ($array as $value) {
echo (empty($value) && 0 !== $value) ? "true\n" : "false\n";
}
如果你想排除empty
认为在这种情况下只是否定它们的其他条件。请注意,如果要检查其他值,这可能不是最佳解决方案。
答案 3 :(得分:2)
if ( !isset($array[$key]) || $array[$key] == "" || is_null($array[$key]) )
{
//given key does not exist or it has "" or NULL value
}
答案 4 :(得分: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
}
答案 5 :(得分: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";
}
}