Вопрос

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

$var = '0';

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

как я могу «сделать» пустой(), чтобы принимать «0» как строки?

Спасибо.

Это было полезно?

Решение

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

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

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

Редактировать

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

Другие советы

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

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

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

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

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

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

В основном пустые () делает то же самое, что и:

if (!$var) ...

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

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

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

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

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

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

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

Isset ()

От Php Manual - Isset ():

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

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

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

empty — Determine whether a variable is empty

Другими словами, он вернется правдой, если переменная является пустой строкой, ложной, массивом (), NULL, «0?, 0 и переменную). нулевой()

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

is_null — Finds whether a variable is NULL

Другими словами, он возвращается только тогда, когда переменная NULL. IS_NULL () противоположен ISSET (), за исключением одного разницы, что ISSET () может применяться к неизвестным переменным, но IS_NULL () только для объявленных переменных.

Таблица на рисунке - это легкая ссылка на то, что эти функции вернутся для разных значений. Пустые места означает, что функция возвращает BoOL (false).enter image description here

Также я сделал пользовательскую функцию для проверки всех вещей.

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");
        }
    }
}

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

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

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

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

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

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

$var = '0';

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

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

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

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

(Последние два могут быть объединены в один с помощью Typasts или «===»).

Примеры:

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

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

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

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

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

Вы не можете, потому что целое, строку, плавание, ноль не имеет значения для PHP.

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

Вы должны проверить характерные функции вашей переменной IS_NUMERIC, ISSET, ===, STRLEN и т. Д.

Например:

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

или

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

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

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

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

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

//trim the $filter

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

//$filter data 

};

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top