В php 0 рассматривается как пустой?
код объясню подробнее:
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
результат возвращает "пустое". Я думал, что empty () проверит, если я уже установил переменную и имею значение внутри. Почему он возвращает "его пустой"??
15 ответов:
пустыми считаются следующие вещи:
- "" (пустая строка)
- 0 (0 как целое число)
- " 0 "(0 как строка)
- NULL
- ложные
- array () (пустой массив)
- var $var; (переменная объявлена, но без значения в классе)
обратите внимание, что это точно такой же список, как и для приведения к Boolean
false.emptyпросто!isset($var) || !$var. Попробуйisset.
мне было интересно, почему никто не предложил очень удобно сравнения типа. Он отвечает на каждый вопрос об общих функциях и операторах сравнения.
фрагмент:
Expression | empty() ----------------+-------- $x = ""; | true $x = null | true var $x; | true $x is undefined | true $x = array(); | true $x = false; | true $x = true; | false $x = 1; | false $x = 42; | false $x = 0; | true $x = -1; | false $x = "1"; | false $x = "0"; | true $x = "-1"; | false $x = "php"; | false $x = "true"; | false $x = "false"; | falseнаряду с другими cheatsheets, я всегда держу распечатку этой таблицы на моем столе в случае, если я не уверен
в случае числовых значений следует использовать функцию is_numeric:
$var = 0; if (is_numeric($var)) { echo "Its not empty"; } else { echo "Its empty"; }
Я недавно был пойман со спущенными штанами на этом тоже. Проблема, с которой мы часто имеем дело, - это неназначенные переменные-скажем, элемент формы, который может быть или не быть там, но для многих элементов
0(или строку'0'который будет проходить через сообщение более точно, но все равно будет оцениваться как "falsey") является законным значением, скажем, в выпадающем списке.используя
empty()и затемstrlen()это ваш лучший лучший, если вам это нужно, а также:if(!empty($var) && strlen($var)){ echo '"$var" is present and has a non-falsey value!'; }
использовать
strlen(). Я столкнулся с той же проблемой, используя 1/0 в качестве возможных значений для некоторых переменных. Я используюif (strlen($_POST['myValue']) == 0)чтобы проверить, есть ли символ или нет в моей переменной.
с лингвистической точки зрения пустой имеет значение без налога. Как и другие, вам придется использовать isset (), чтобы проверить, определена ли переменная, что вы и делаете.
это работает для меня!
// if(isset($_POST['post_var'])&&$_POST['post_var']!==''){ echo $_POST['post_var']; } //results: 1 if $_POST['post_var']='1' 0 if $_POST['post_var']='0' skip if $_POST['post_var']=''
чтобы принять 0 в качестве значения в переменной use
issetпроверьте, если переменная пуста
$var = 0; if ($var == '') { echo "empty"; } else { echo "not empty"; } //output is emptyПроверьте, установлена ли переменная
$var = 0; if (isset($var)) { echo "not empty"; } else { echo "empty"; } //output is not empty
от ручного: Возвращает FALSE, если var имеет непустое и ненулевое значение.
пустыми считаются следующие вещи:
- "" (пустая строка)
- 0 (0 как целое число)
- " 0 " (0 как строка) NULL
- FALSE array () (пустой массив) var
- переменной$var; (переменная объявлена, но без значения в классе)
пустыми считаются следующие вещи:
- "" (пустая строка)
- 0 (0 как целое число)
- " 0 "(0 как строка)
- NULL
- ложные
- array () (пустой массив)
- var $var; (переменная объявлена, но без значения в классе)
в вашем случае
$varи0, Так чтоempty($var)вернутсяtrue, вы отрицание результата перед его тестированием, поэтому блок else будет работать, давая"Its empty" в качестве выходного.
на самом деле isset просто проверить, если переменные наборы или not.In в этом случае, если вы хотите проверить, действительно ли ваша переменная равна нулю или пуста, вы можете использовать этот пример:
$myVar = ''; if (empty($myVar)) { echo "Its empty"; } echo "<br/>"; if ($myVar===0) { echo "also zero!"; }просто для уведомления $myVar==0 действуйте как пустая функция.