如何在PHP中检查数组中的所有键是否具有空值?

22

我有一个数组

$array = array('key1' => null, 'key2' => null, 'key3' => null, 'key4' => null);

我想确定所有数组键是否具有空值,如果是,则返回false。上面的示例应该返回false,因为它没有任何值。但是,如果一个或多个键具有任何值,则应返回true,例如下面的示例是true。
$array = array('value1', 'key2' => value2, 'value3', 'key4' => value4);

1
所有的键都有值,只是这些键不是你想象中的那些。分别是 Array ( [0] => key1 [1] => key2 [2] => key3 [3] => key4 )Array ( [0] => key1 [key2] => value2 [1] => key3 [key4] => value4 ) - Quentin
抱歉,我知道了,我误解了重点 :) - Ibrahim Azhar Armar
7个回答

58

假设您的意思是一个像数组一样的结构

array('key1' => null, 'key2' => null, 'key3' => null, 'key4' => null)

答案很简单,就是使用array_filter

if (!array_filter($array)) {
    // all values are empty (where "empty" means == false)
}

1
是的,这正是我想要的 :). 我一直在寻找这个。谢谢你。 - Ibrahim Azhar Armar

4
您的假设是不正确的。array('key1', 'key2', 'key3', 'key4')有4个值和键在范围0..3内。 array('key1', 'key2' => value2, 'key3', 'key4' => value4)具有值key1(键为0),键key2,值key3(键为1)和键key4

@Ibrahim: 尝试使用 print_r($array),然后您应该看到数组的样子。blagovest是完全正确的。 - Fender

1

如果您需要检查所有值是否为null

$allNull = true;
foreach( $array as $key => $val ) {
    if( is_null( $array[$key] ) ) {
        $allNull = false;
        break;
    }
}

// Do what you will with $allNull

1

我认为您的意思是要检查所有键是否都是数字,或者至少有一个是字符串:

$ok = false;
foreach( array_keys($array) as $key ){
    if(is_string($key)){
        $ok=true;
        break;
    }
}

return $ok;

0
$flag = 0;
foreach($array as $keys)
{
        if(!isempty($keys)) {
        $flag++;
        }
}

if(flag > 0)
{
    echo "Array not empty!";
}
else {
    echo "Array empty!";
}

应该可以工作。


isempty()不是正确的语法来检查数组键是否为空值。正确的语法是empty()。:). 还是谢谢你,我明白你试图解释的内容。 - Ibrahim Azhar Armar
我的错误。:p 好久没碰 PHP 了。:D - Anonymous

0
$array = array('key1' => null, 'key2' => null, 'key3' => null, 'key4' => null);

答案是:
$filterArray = array_filter($array);

if(count($filterArray) == 0){
    return false;
}else{
    return true;
}

0

简单的

count(array_filter($array)) != count($array)

如果是多维数组

count(array_filter(array_values($array))) != count(array_values($array))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接