PHP if数组为空


PHP if array is empty

我有一个数组,当我像这样打印输出时,print_r($userExists);

它返回Array ( )。我写这段代码是为了告诉我数组是否为空:

if(isset($userExists)){
        echo 'exists';
    }else{
        echo 'does not exists';
    }

但是,无论数组是否为空,它都只返回exists我做错了什么,当填充数组时,它看起来像这个Array ( [0] => Array ( [id] => 10 ) )

使用

if( !empty( $userExists ) ) {
    echo 'exists';
}
else {
    echo 'does not exists';
}

if( count( $userExists ) ) {
    echo 'exists';
}
else {
    echo 'does not exists';
}

然而,使用empty()更安全,因为如果该变量不存在,则脚本不会因为exception而停止,而count()会停止

isset在这里"不起作用"*,因为即使该变量为空,也已设置(因此存在(。
因此,基本上,isset

确定变量是否已设置且不为NULL。


最后但同样重要的是,如果你想知道哪一个对代码优化"更好",我可以告诉你一个小"秘密":count()不需要每次遍历数组就知道会有多少元素,因为它在内部存储元素编号(如下图所示(,所以每次调用count()函数都会导致O(1)的复杂性。

ZEND_API int zend_hash_num_elements(const HashTable *ht)
{
    IS_CONSISTENT(ht);
    return ht->nNumOfElements;
}

zend_hash_num_elements是从count()调用的(看这里(

来自php手动



*(未按您的意愿/需要工作(

使用如下

if(isset($userExists) && count($userExists) > 0 ){
        echo 'exists';
    }else{
        echo 'does not exists';
    }

您可以检查变量是否是一个数组,并且具有一些值

if(is_array($userExists) && count($userExists) > 0 ){
    echo 'exists';
}else{
    echo 'does not exists';
}
$userExists = array();

变量存在,并且已设置。这就是isset测试的目的。

你想要的是:

if( $userExists) echo "exists";

您不需要额外检查if!

if($array){
// Will execute only if there is any value inside of the array
}

通过使用,如果不需要检查是否有任何值可用!您正在为可能不存在的变量(如$_GET值或$_SESSION等(使用"isset"。。。。"为空"以检查字符串值

通过php文档,empty仅适用于字符串而不适用于数组