В php 0 считается пустым?


Код объяснит больше:

$var = 0;

if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}

Результат возвращает "Его пустой". Я думал, что функция empty() проверит, установил ли я уже переменную и есть ли внутри значение. Почему он возвращает "Свой пустой"??

Author: mysqllearner, 2010-02-08

15 answers

Http://php.net/empty

Следующие вещи считаются пустыми:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • "0" (0 в виде строки)
  • НОЛЬ
  • ЛОЖЬ
  • массив() (пустой массив)
  • var $var; (объявленная переменная, но без значения в классе)

Обратите внимание, что это точно такой же список, как и для приведения к логическому false. empty это просто !isset($var) || !$var. Попробуй isset вместо этого.

 135
Author: deceze, 2014-03-31 20:09:22

Мне было интересно, почему никто не предложил чрезвычайно удобную таблицу сравнения типов . Он отвечает на все вопросы об общих функциях и операторах сравнения.

Фрагмент:

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   

Наряду с другими чит-листами я всегда держу на своем столе распечатку этой таблицы на случай, если я не уверен

 61
Author: Dan Soap, 2011-01-08 14:20:35

В случае числовых значений следует использовать функцию is_numeric:

$var = 0;

if (is_numeric($var))
{
  echo "Its not empty";
} 
else 
{
    echo "Its empty";
}
 27
Author: Khandad Niazi, 2013-05-29 07:48:01

Недавно меня тоже застукали со спущенными штанами на этом. Проблема, с которой мы часто сталкиваемся, - это неустановленные переменные - скажем, элемент формы, который может быть там, а может и не быть, но для многих элементов 0 (или строка '0', которая более точно прошла бы через сообщение, но все равно была бы оценена как "ложная"), является допустимым значением, скажем, в раскрывающемся списке.

Использование empty() сначала, а затем strlen() является вашим лучшим решением, если вам это также нужно, как:

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}
 7
Author: Oliver Williams, 2015-11-10 12:21:12

Использовать strlen() вместо этого. Я столкнулся с той же проблемой, используя 1/0 в качестве возможных значений для некоторых переменных. Я использую if (strlen($_POST['myValue']) == 0), чтобы проверить, есть ли символ в моей переменной или нет.

 7
Author: Calin Rusu, 2017-02-27 11:19:40

С лингвистической точки зрения пустой имеет значение без значения . Как и другие, вам придется использовать isset(), чтобы проверить, определена ли переменная, что вы и делаете.

 4
Author: Elzo Valugi, 2010-02-08 09:32:48

Это работает на меня!

//
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']=''
 3
Author: Toan Nguyen Thai, 2017-08-11 06:37:52

empty() возвращает значение true для всего, что оценивается как FALSE, на самом деле это замаскированное "не" (!). Я думаю, ты имел в виду isset()

 2
Author: soulmerge, 2010-02-08 09:26:31

Чтобы принять 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
 2
Author: bhu1st, 2017-05-18 09:23:00

Из руководства: Возвращает значение FALSE, если var имеет непустое и ненулевое значение.

Следующие вещи считаются пустыми:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • "0" (0 в виде строки) NULL
  • ЛОЖНЫЙ массив() (пустой массив) var
  • $var; (объявленная переменная, но без значения в классе)

Подробнее: http://php.net/manual/en/function.empty.php

 1
Author: Adam Kiss, 2010-02-08 09:20:53
if (empty($var) && $pieces[$var] != '0') {
//do something
}

В моем случае этот код сработал.

 1
Author: Cherrish, 2014-06-26 08:27:17

Следующие вещи считаются пустыми:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • "0" (0 в виде строки)
  • НОЛЬ
  • ЛОЖЬ
  • массив() (пустой массив)
  • var $var; (объявленная переменная, но без значения в классе)

Из Руководства по PHP

В вашем случае $var равно 0, поэтому empty($var) вернет true, вы отрицаете результат перед его тестированием, поэтому блок else будет запущен выдача "Its empty" в качестве вывода.

 0
Author: codaddict, 2010-02-08 09:19:16

На самом деле, просто проверьте, установлена ли переменная или нет.В этом случае, если вы хотите проверить, действительно ли ваша переменная равна нулю или пуста, вы можете использовать этот пример:

$myVar = '';
if (empty($myVar))
{
  echo "Its empty";
}
echo "<br/>";

if ($myVar===0)
{
  echo "also zero!";
}

Просто для уведомления $myVar==0 действует как пустая функция.

 0
Author: arash, 2012-11-27 21:33:19

Пустой должно означать пустой.. что бы там ни говорил декиз.

Когда я это сделаю

$var = '';    
$var = '0';

Я ожидаю, что var_dump(empty($var)); вернет false.

Если вы проверяете что-то в массиве, вам всегда нужно сначала сделать isset($var).

 0
Author: Paul Wolbers, 2017-10-13 21:14:04

Используйте только ($_POST['input_field_name'])!=0 вместо !($_POST['input_field_name'])==0, тогда 0 не считается пустым.

 0
Author: Manish Sharma, 2018-01-09 16:35:36