我有一个数组,当我打印输出时print_r($userExists);
它返回Array ( )
我写了这段代码告诉我数组是否为空:
if(isset($userExists)){
echo 'exists';
}else{
echo 'does not exists';
}
但无论数组是否为空,它都只返回exists
我做错了什么,当数组填充时,它看起来像Array ( [0] => Array ( [id] => 10 ) )
答案 0 :(得分:7)
使用
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。
<小时/> 最后但并非最不重要的,如果你想知道哪个是更好的&#34;对于代码优化,我可以告诉你一点&#34;秘密&#34;:
count()
每次都不需要遍历数组以知道有多少元素,因为在内部,它存储元素编号(如您所见),因此每次调用count()
函数都会导致O(1)
复杂性。
ZEND_API int zend_hash_num_elements(const HashTable *ht)
{
IS_CONSISTENT(ht);
return ht->nNumOfElements;
}
从zend_hash_num_elements
调用{p> count()
(看一看here)
*(不按您的意愿/需要工作)
答案 1 :(得分: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';
}
答案 2 :(得分:0)
$userExists = array();
变量存在,并且已设置。这是isset
测试的内容。
你想要的是:
if( $userExists) echo "exists";
答案 3 :(得分:0)
您不需要额外检查if!
if($array){
// Will execute only if there is any value inside of the array
}
通过使用,如果不需要检查是否有任何值! 你正在使用'isset'作为可能不存在的变量,如$ _GET值或$ _SESSION等.... 'empty'来检查字符串值
通过php文档空只能在字符串而不是数组