Php: '0' как строка с пустым()

Я хочу, чтобы 0 считалось целым числом, а "0" считалось строкой, но empty() считает "0" в качестве строки в приведенном ниже примере,

$var = '0';

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is empty';
}

как я могу "make" empty() взять "0 как строки?"

спасибо.

Ответ 1

Вы не можете это сделать. Так оно и было разработано. Вместо этого вы можете написать инструкцию and для проверки:

if (empty($var) && $var !== '0') {
    echo $var . ' is empty';
}

Вы можете использовать isset, если, конечно, вы не хотите, чтобы он удалял другие пустые, что empty проверяет.

Edit

Исправлена ​​проверка, чтобы выполнить проверку типа, а также 2371 за указание:)

Ответ 2

Вы не можете использовать empty. Из руководства PHP:

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

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

Вам нужно добавить дополнительную проверку.

Ответ 3

Вы не можете использовать только empty(). См. Руководство . Вы можете сделать это, хотя:

if ($var !== '0' && empty($var)) {
   echo "$var is empty and is not string '0'";
}

В принципе, empty() делает то же самое, что:

if (!$var) ...

Но не вызывает уведомление PHP, когда переменная не установлена.

Ответ 4

Вы не можете. Из руководство

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

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

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

Ответ 5

В обоих случаях empty() вернет true. Проверьте документ - http://php.net/empty.

Я предлагаю использовать другую функцию, соответствующую вашей спецификации.

Ответ 6

empty является, безусловно, самой запутанной и бесполезной функцией в репертуаре php. Не используйте его.

При проверке значения вы хотите знать три отдельные вещи.

  • существует значение (используйте isset)
  • значение имеет определенный тип (use is_xxx)
  • значение имеет определенные свойства (используйте операторы сравнения, strpos или регулярные выражения).

(последние два могут быть объединены в один с typecasts или '===').

Примеры:

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');

Ответ 7

Я всегда добавляю к своей кодовой базе

function is_blank($value) {
    return empty($value) && !is_numeric($value);
}

и используйте его вместо empty(). Он решает проблему сохранения нулей (int, float или string) как непустых.

См. http://www.php.net/manual/en/function.empty.php#103756, который был добавлен в мае 2011 г.

Ответ 8

$var = '0';

// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
    echo '$var is empty or the string "0"';
}

Ответ 9

PHP имеет разные функции, которые можно использовать для проверки значения переменной. Три полезные функции для этого: isset(), empty() и is_null(). Все эти функции возвращают логическое значение. Если эти функции не используются корректно, они могут вызвать неожиданные результаты.

isset() и empty() часто рассматриваются как функции, противоположные, однако это не всегда так. В этом посте я объясню различия между этими функциями.

Исеть()

Из руководства PHP - isset():

isset — Determine if a variable is set and is not NULL

Иными словами, он возвращает true только тогда, когда переменная не равна нулю. пустой()

Из PHP Manual - empty():

empty — Determine whether a variable is empty

Иными словами, он вернет true, если переменная является пустой строкой, false, array(), NULL, "0?, 0" и неустановленной переменной. is_null()

Из руководства PHP - is_null():

is_null — Finds whether a variable is NULL

Иными словами, он возвращает true только тогда, когда переменная имеет значение null. 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");
        }
    }
}

Ответ 10

В этом случае не используйте пустой, используйте isset() вместо него. Это также позволит 0 как целое число.

$var = '0';
if (!isset($var)) {
    print '$var is not set';
}

$var = 0;
if (!isset($var)) {
    print '$var is not set';
}

Ничего не должно печатать.

Ответ 11

Вы не можете, потому что integer, string, float, null не имеет значения для PHP.

Потому что это круто:)

Вы должны проверить характерные особенности вашей переменной is_numeric, isset, ===, strlen и т.д.

Например:

if (strlen(@$var)==0) {
    echo @$var . ' is empty';
}

или

if (@$var==="" || !isset($var)) {
    echo @$var . ' is empty';
}

или другие примеры:)

спасибо за чтение.

Ответ 12

Если вы хотите пропустить пустой фильтр $и не пропускать $filter = '0' и другие значения

$filter = ''; //or $filter = '0'; or $filter = '1';

//trim the $filter

if( isset($filter) and ( $filter != '' or $filter == '0') ) {

//$filter data 

};

Ответ 13

if ( (is_array($var) && empty($var)) || strlen($var) === 0 ) { echo $var . ' is empty'; }