Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查变量是否有值且不为空_Php_Variables - Fatal编程技术网

Php 检查变量是否有值且不为空

Php 检查变量是否有值且不为空,php,variables,Php,Variables,我想检查一个数值变量是否有包含“0”的值并且不是空的。Empty表示空,而不是“0” 这真的是我能用PHP做的最好的了吗 if (isset($variable) && $variable !== '') { ... } 我想用一个检查来完成这项工作,而不用为它编写函数…您要检查的是字符串长度,而不是空的。这可以很容易地使用 如果您想排除无效的空白,您可以在其中添加一个修剪,这也是通常推荐的 if (isset($variable) && strlen(trim

我想检查一个数值变量是否有包含“0”的值并且不是空的。Empty表示空,而不是“0”

这真的是我能用PHP做的最好的了吗

if (isset($variable) && $variable !== '') { ... }

我想用一个检查来完成这项工作,而不用为它编写函数…

您要检查的是字符串长度,而不是空的。这可以很容易地使用

如果您想排除无效的空白,您可以在其中添加一个修剪,这也是通常推荐的

if (isset($variable) && strlen(trim($variable)) > 0 } {
    // ...
}

是的,您的方式是实现以下目标的最佳、最有效的方式:

确保变量已设置,以便在检查未设置的变量时不会收到警告 这不是空字符串 但是,可以是“0”、“0”、“false”、“null”或“[]”,所有这些在PHP中都是空的,但是您希望将其视为非空的,如OP所指示的。 你的!==将确保仅对字符串进行精确比较,不进行强制转换/转换 strlen的使用也很有效,但是如果你看一下生成的操作码,你会发现,假设所有操作的权重相等,那么直接比较在计算效率上要高出3倍,如果像DO_FCALL这样的操作比基本的is_NOT_idential检查要花更多的周期来执行,则效率更高

这个!==版本字节码:

    IS_NOT_IDENTICAL                                     ~1      !0, ''
     SEND_VAR                                                 !0
     DO_FCALL                                      1  $1      'strlen'
     IS_SMALLER                                       ~2      $1, 0
strlen>0版本字节码:

    IS_NOT_IDENTICAL                                     ~1      !0, ''
     SEND_VAR                                                 !0
     DO_FCALL                                      1  $1      'strlen'
     IS_SMALLER                                       ~2      $1, 0
答案已被编辑。进一步查阅三元运算下的附加值

为什么要费那么大的劲使用这些呢

只要使用一个不为空的if!空$var{…}

但是,如果您将其与GET数组一起使用,则为yes;最好在条件语句中使用isset和empty

我想检查变量是否有包含“0”的值且不是空的

对我来说,这解释为:

检查一个值是否有一个值,并且在写入时不是空的,并且代表包含0

因此:

如果!空$var&&$var='0'{…}

我想做一个检查,而不写一个函数它

然后使用三元运算符

但是如果没有一个函数。。。好吧,你不能。您仍然需要某种类型的函数

关于我上面提到的三元运算符。您可以在堆栈上的这两个Q&A中引用所谓的嵌套三元操作:

这样您就不需要自定义函数了

旁注:到目前为止,我并没有剥夺或试图剥夺夏洛特被接受的答案,这个答案应该仍然被接受。这只是实现最终目标的额外方法。
您所能做的最好的事情就是创建自己的自定义函数。关键是通过引用传递变量,以便在传递未定义的变量时不会触发警告。正如作为评论发布的一样,我会使用isset$variable和!空$variable和!是数值$variable和$variable!==不适用于所有情况

您的自定义函数可能类似于此改进版本:

function is_blank(&$variable) {
    return (bool) !(isset($variable) AND (!empty($variable) OR is_numeric($variable) OR $variable === false));
}

$variable!=''替换它。设置$variable和!空$variable和!是数值$variable和$variable!==false@D.Joe您可以为此类测试编写一个自定义函数,然后根据需要重新使用它查看“0”被视为空的原因您回答了自己的问题,这甚至不是问题的解决方案。0被视为空的,这是OP不希望看到的。@CharlotteDunois我误读了这个问题。我就把答案留在这里。毕竟,反对票也是选票就像糟糕的宣传仍然是宣传。你可能是唐纳德·特朗普变相了吗-阅读我在他们问题下的评论。这完全没有道理,而且与它本身和留下的评论如此矛盾,我应该在游泳池旁边等着,看着女孩们走过。这里太冷了,不能去游泳池如果在strlen检查之前未设置变量,您将得到警告这就是为什么isset调用在那里我忘记在原始答案中包含它。请参阅我的答案,strlen的效率远远低于检查变量的强相等性。在单一情况下,没什么大不了的,但如果在一个大循环中会有什么影响,Carlotte,OP在问题中说,按照我的标准,这个问题就像午夜的泥浆一样清澈,看不到月亮:我想用一个检查来做这件事,而不用为它写函数…-如果你投反对票,我可以向你保证,我不会投反对票。这不是我的风格;-回答得不错。@Fred ii-在他编辑问题之前,我开始写答案;-它还说了你能做的最好的事情,。。。如果他不想那样,那不是我的错-是的,我知道夏洛特。。叹气好吧,OP必须澄清问题,尝试某人的答案和/或在任何一个有效或无效的标题下发表评论。我不会再给我的加任何东西了。直到我知道我要对付的是哪种动物。@D.Joe代码清洁不是你要求的。创建一个函数是最糟糕的事情,你可以做的计算。你应该改变你的帖子,指出什么会使我的代码更容易阅读,但这也是一个问题
这是主观的。我认为比较海峡两岸比较容易理解understand@Fred-别担心,我肯定也会想念我的手指的!我之所以支持它,是因为我投入了大量的精力和逻辑。@Fred ii-多亏了php vld库!很好,雷?好了,我要去游泳了,再见!