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