В php 0 считается пустым?
Код объяснит больше:
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
Результат возвращает "Его пустой". Я думал, что функция empty() проверит, установил ли я уже переменную и есть ли внутри значение. Почему он возвращает "Свой пустой"??
15 answers
Следующие вещи считаются пустыми:
- "" (пустая строка)
- 0 (0 как целое число)
- "0" (0 в виде строки)
- НОЛЬ
- ЛОЖЬ
- массив() (пустой массив)
- var $var; (объявленная переменная, но без значения в классе)
Обратите внимание, что это точно такой же список, как и для приведения к логическому 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
Наряду с другими чит-листами я всегда держу на своем столе распечатку этой таблицы на случай, если я не уверен
В случае числовых значений следует использовать функцию is_numeric:
$var = 0;
if (is_numeric($var))
{
echo "Its not empty";
}
else
{
echo "Its empty";
}
Недавно меня тоже застукали со спущенными штанами на этом. Проблема, с которой мы часто сталкиваемся, - это неустановленные переменные - скажем, элемент формы, который может быть там, а может и не быть, но для многих элементов 0
(или строка '0'
, которая более точно прошла бы через сообщение, но все равно была бы оценена как "ложная"), является допустимым значением, скажем, в раскрывающемся списке.
Использование 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 в качестве значения при использовании переменной 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
- ЛОЖНЫЙ массив() (пустой массив) var
- $var; (объявленная переменная, но без значения в классе)
Подробнее: http://php.net/manual/en/function.empty.php
if (empty($var) && $pieces[$var] != '0') {
//do something
}
В моем случае этот код сработал.
Следующие вещи считаются пустыми:
- "" (пустая строка)
- 0 (0 как целое число)
- "0" (0 в виде строки)
- НОЛЬ
- ЛОЖЬ
- массив() (пустой массив)
- var $var; (объявленная переменная, но без значения в классе)
В вашем случае $var
равно 0
, поэтому empty($var)
вернет true
, вы отрицаете результат перед его тестированием, поэтому блок else будет запущен выдача "Its empty
" в качестве вывода.
На самом деле, просто проверьте, установлена ли переменная или нет.В этом случае, если вы хотите проверить, действительно ли ваша переменная равна нулю или пуста, вы можете использовать этот пример:
$myVar = '';
if (empty($myVar))
{
echo "Its empty";
}
echo "<br/>";
if ($myVar===0)
{
echo "also zero!";
}
Просто для уведомления $myVar==0 действует как пустая функция.
Пустой должно означать пустой.. что бы там ни говорил декиз.
Когда я это сделаю
$var = '';
$var = '0';
Я ожидаю, что var_dump(empty($var));
вернет false.
Если вы проверяете что-то в массиве, вам всегда нужно сначала сделать isset($var)
.
Используйте только ($_POST['input_field_name'])!=0
вместо !($_POST['input_field_name'])==0
, тогда 0 не считается пустым.