2010-11-09 4 views
16

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

$var = '0'; 

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

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

спасибо.

+1

Вы могли бы найти это полезным: http://www.php.net /manual/en/types.comparisons.php – zzzzBov

+0

большое спасибо! – laukok

ответ

27

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

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

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

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

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

+3

'& $ var! = '0'' Это неверно: 0 ==' 0 'в PHP. Использовать ===. – 2371

+1

! == то есть .... –

+0

Либо или его исправлено выше. –

0

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

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

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

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

6

Вы не можете с empty. From the PHP Manual:

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

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

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

2

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

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

3

Вы не можете. От the manual

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

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

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

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

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

В основном, пустой() делает то же самое, как:

if (!$var) ... 

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

+0

большое спасибо! – laukok

1
$var = '0'; 

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

большое спасибо! – laukok

2

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

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

  • значение существует (использование Исеть)
  • значение имеет конкретный тип (использование 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'); 
+0

это большое спасибо! – laukok

+0

Вышеуказанное немного неясно: 'is_int ($ var)' тесты, если '$ var' является целым числом * или * строкой в ​​целочисленном формате. Так, например, 'is_int (" 0 ")' вернет true. Чтобы получить внутренний тип переменной, используйте 'gettype ($ var)'. Например, 'if (gettype ($ var) ===" integer ")'. –

2

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

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

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

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

-1

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

+0

Поскольку это делает гораздо больше, чем попросил ОП, короткое объяснение значительно улучшит ваш ответ. – RandomSeed

0

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

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

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

Например:

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

или

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

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

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

+0

Пожалуйста, добавьте описание снимка к вашему ответу, почему и как эти альтернативы решают начальную проблему. Это помогает читателю лучше понять решение. – user1438038

1

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

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

Исеть()

From PHP manual – isset():

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

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

From PHP Manual – empty():

empty — Determine whether a variable is empty 

Другими словами, он возвращает истину, если переменная пустая строка, ложь, массив(), NULL, «0 ?, 0, и отключенное переменную , is_null()

From PHP Manual – is_null():

is_null — Finds whether a variable is 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"); 
     } 
    } 
} 
0

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

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

//trim the $filter 

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

//$filter data 

}; 

 Смежные вопросы

  • Нет связанных вопросов^_^