2014-03-27 82 views
1

我有一个数组,当我打印像这样print_r($userExists);PHP如果数组为空

输出返回Array ()我写了这个代码告诉我,如果数组为空或不:

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

但无论如果数组是空的或不是,它只返回exists什么我做错了,被填充数组的时候,它看起来像这样Array ([0] => Array ([id] => 10))

+0

甚至设置了一个空数组。你可以检查计数($ userExists) – ToBe

回答

7

使用

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

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

Howev呃更安全地使用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_elementscount()称为(看看here

php manual



*(不工作,你想/需要)

+1

值得指出的是,如果没有设置'$ userExists','count($ userExists)'会产生错误,而'empty($ userExists)'不会产生错误。 – Styphon

+0

@Styphon正如我一直告诉你的,已经确定变量* does *存在,否则'print_r'会抛出一个错误,而不是返回一个空数组。 –

+0

@Styphon:是的,你说得对。我正在更新我的答案:) – DonCallisto

1

使用如下

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

OR

可以检查该变量是一个数组,并且具有一定的价值

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

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

你想要的是:

if($userExists) echo "exists"; 
+0

如果它不存在,会导致错误。 – Styphon

+0

@Styphon但是我确定它确实存在,OP也是这样做的,在其上使用'print_r'。 –

+0

但是你忽略了其他的东西,当它不存在时。当它不存在时,代码会抛出错误。这是给OP的不好建议。 – Styphon

0

你并不需要,如果额外的检查!

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

通过使用,如果没有必要检查是否有任何值可用! 您正在使用的变量“isset”可能不存在像$ _GET值或$ _SESSION等等.... “空”的PHP文件空只能在字符串检查字符串值

,而不是阵列