我有一个数组,当我像这样打印输出时,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仅适用于字符串而不适用于数组