我想将0视为一个整数,将'0'视为字符串,但是empty()在下面的示例中将'0'视为字符串,
$var = '0';
// Evaluates to true because $var is empty
if (empty($var)) {
echo '$var is empty';
}
我如何'使'empty()将'0'作为字符串?
感谢。
答案 0 :(得分:35)
你做不到。这就是它的设计方式。相反,您可以编写and
语句来测试:
if (empty($var) && $var !== '0') {
echo $var . ' is empty';
}
您可以使用isset
,除非您希望它拒绝empty
检查的其他空白。
修改强>
修复了检查以进行类型检查,这要归功于2371指出的那样:)
答案 1 :(得分:8)
您无法使用empty
。 From the PHP Manual:
以下内容被认为是空的:
- “”(空字符串)
- 0(0为整数)
- “0”(0作为字符串)
- NULL
- FALSE
- array()(空数组)
- var $ var; (声明的变量,但在类中没有值)
您必须另外添加其他支票。
答案 2 :(得分:6)
你不能只用空()。请参阅manual。你可以这样做:
if ($var !== '0' && empty($var)) {
echo "$var is empty and is not string '0'";
}
基本上,empty()与:
相同if (!$var) ...
但是,如果未设置变量,则不会触发PHP Notice。
答案 3 :(得分:3)
你做不到。来自the manual
如果var具有非空和非零值,则返回FALSE。
以下内容被认为是空的:
- “”(空字符串)
- 0(0为整数)
- “0”(0作为字符串)
- NULL
- FALSE
- array()(空数组)
- var $ var; (声明的变量,但在类中没有值)
答案 4 :(得分:3)
PHP具有不同的功能,可用于测试变量的值。三个有用的函数是isset(),empty()和is_null()。所有这些函数都返回一个布尔值。如果未正确使用这些功能,可能会导致意外结果。
isset()和empty()通常被视为相反的函数,但并非总是如此。在这篇文章中,我将解释这些功能之间的差异。
isset()函数
isset — Determine if a variable is set and is not NULL
换句话说,仅当变量不为null时才返回true。 空()
empty — Determine whether a variable is empty
换句话说,如果变量是空字符串,false,array(),NULL,“0?”,0和未设置的变量,它将返回true。 is_null()
is_null — Finds whether a variable is NULL
换句话说,仅当变量为null时才返回true。 is_null()与isset()相反,除了一个差异,即isset()可以应用于未知变量,但is_null()仅适用于声明的变量。
图中的表格很容易参考这些函数将针对不同的值返回的内容。空格表示函数返回bool(false)。
此外,我已经制作了自定义功能来检查所有内容。
function checkEmpty($var, $term = ""){
if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){
return true;
}
else{
if($term != ""){
return array("status" => "error", "desc" => "$term can not be empty");
}
else{
return array("status" => "error", "desc" => "value can not be empty");
}
}
}
答案 5 :(得分:2)
在您的两种情况下,empty()
都会返回true
。查看文档 - http://php.net/empty。
我建议使用不同的功能来匹配您的规格。
答案 6 :(得分:2)
我总是添加到我的代码库
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
并使用它而不是empty()。它解决了将零(int,float或string)保持为非空的问题。
请参阅2011年5月添加的http://www.php.net/manual/en/function.empty.php#103756。
答案 7 :(得分:1)
$var = '0';
// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
echo '$var is empty or the string "0"';
}
答案 8 :(得分:1)
empty
是php保留曲目中最令人困惑和无用的功能。不要使用它。
检查值时,您想知道三件事。
strpos
或正则表达式)。(最后两个可以组合成一个带有类型转换或'===')。
示例:
if(isset($var) && is_string($var) && strlen($var) > 0)...
if(isset($var) && intval($var) > 0)...
if(isset($var) && $var === '0')...
这看起来更加冗长,但清楚地表明了你在做什么。对于结构对象,使用快捷方式获取器通常是有意义的,例如
/// get a string
function s($ary, $key, $default = '') {
if(!isset($ary[$key])) return $default;
$s = trim($ary[$key]);
return strlen($s) ? $s : $default;
}
/// get a natural number
function n($ary, $key, $default = 0) {
$n = intval(s($ary, $key));
return $n > 0 ? $n : $default;
}
$name = s($_POST, 'name');
$age = n($_POST, 'age');
答案 9 :(得分:0)
在这种情况下,请不要使用empty,请使用isset()代替它。这也将允许0作为整数。
$var = '0';
if (!isset($var)) {
print '$var is not set';
}
$var = 0;
if (!isset($var)) {
print '$var is not set';
}
也不应该打印任何东西。
答案 10 :(得分:0)
你不能,因为整数,字符串,浮点数,null对PHP无关紧要。
因为很酷:)
您必须检查变量is_numeric,isset,===,strlen等的特征。
例如:
if (strlen(@$var)==0) {
echo @$var . ' is empty';
}
或
if (@$var==="" || !isset($var)) {
echo @$var . ' is empty';
}
或其他例子:)
感谢阅读。
答案 11 :(得分:0)
如果你想跳过空的$ filter而不要跳过$ filter ='0'和其他人 值强>
$filter = ''; //or $filter = '0'; or $filter = '1';
//trim the $filter
if( isset($filter) and ( $filter != '' or $filter == '0') ) {
//$filter data
};
答案 12 :(得分:-1)
if ( (is_array($var) && empty($var)) || strlen($var) === 0 ) {
echo $var . ' is empty';
}