Подтвердить что ты не робот

В php 0 обрабатывается как пустой?

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

$var = 0;

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

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

4b9b3361

Ответ 1

http://php.net/empty

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

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

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

Ответ 2

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

Отрывок:

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   

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

Ответ 3

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

$var = 0;

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

Ответ 4

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

Ответ 5

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

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

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}

Ответ 6

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

Ответ 7

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

//
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']=''

Ответ 8

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

Ответ 9

Чтобы принять 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

Ответ 10

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

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

От Руководство по PHP

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

Ответ 11

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

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

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

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

Ответ 12

if (empty($var) && $pieces[$var] != '0') {
//do something
}

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

Ответ 13

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

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

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

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

Ответ 14

пустое должно означать пустое.

Когда я делаю

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

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

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

Ответ 15

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

Ответ 16

Не уверен, что есть еще люди, которые ищут объяснения и решения. Комментарии выше говорят все о различиях между ИСТИНА/ЛОЖЬ /1/0.
Я просто хотел бы принести свои 2 цента за способ отображения фактического значения.

БУЛЕВЫ

Если вы работаете с логическим типом данных, вы ищете результат ИСТИНА или ЛОЖЬ; если вы храните его в MySQL, он будет храниться как 1 соотв. 0 (если я не ошибаюсь, это то же самое в памяти вашего сервера).

Таким образом, чтобы отобразить значение в PHP, вам нужно проверить, является ли оно истинным (1) или ложным (0), и отобразить все, что вы хотите: "ИСТИНА" или "ЛОЖЬ" или, возможно, "1" или "0".
Внимание, все, что больше (или отличается) от 0, также будет считаться ИСТИНОЙ в PHP. Например: 2, "abc" и т.д. Будут возвращать TRUE.

БИТ, ТИНЬИНТ

Если вы работаете с числовым типом данных, способ его хранения одинаков.
Чтобы отобразить значение, вы должны указать PHP, чтобы оно обрабатывалось как число. Самый простой способ, который я нашел, - умножить его на 1.

Ответ 17

правильный пример. просто создайте поле типа int (например, номер мобильного телефона) в базе данных и отправьте пустое значение для следующей базы данных через форму или просто вставьте, используя SQL. что это будет сохранено в базе данных 0, потому что это тип int и не может быть сохранено как пустое или нулевое. следовательно, он пуст, но будет сохранен как 0. Поэтому, когда вы извлекаете данные через PHP и проверяете пустые значения. это очень полезно и логически правильно.

0,00, 0,000, 0,0000.... 0,0... 0 также пусто, и приведенный выше пример также можно использовать для хранения различных типов значений в базе данных, таких как float, double, decimal (десятичные имеют разные варианты, такие как 0,000 и так далее).

Ответ 18

Вам нужно использовать isset(), чтобы проверить, установлено ли значение.