Я хочу, чтобы значение 0 считалось целым числом, а «0» считалось строкой, но empty () рассматривает «0» как строку в приведенном ниже примере,
$var = '0'; // Evaluates to true because $var is empty if (empty($var)) { echo '$var is empty'; }
как я могу «сделать» empty (), чтобы взять «0 в качестве строк?
Благодарю.
Вы не можете это сделать. Так оно и было разработано. Вместо этого вы можете написать инструкцию and
инструкцию:
if (empty($var) && $var !== '0') { echo $var . ' is empty'; }
Вы можете использовать isset
, если, разумеется, вы не хотите, чтобы он удалял другие empty
контейнеры, для которых были empty
проверки.
редактировать
Исправлена проверка, чтобы сделать проверку типа, а также 2371 за указание на это 🙂
Вы не можете с empty
. Из руководства PHP:
Следующие вещи считаются пустыми:
- "" (пустая строка)
- 0 (0 как целое число)
- «0» (0 в виде строки)
- НОЛЬ
- ЛОЖНЫЙ
- array () (пустой массив)
- var $ var; (объявленная переменная, но без значения в классе)
Вы должны добавить дополнительную проверку.
Вы можете использовать только empty (). См. Руководство . Вы можете сделать это, хотя:
if ($var !== '0' && empty($var)) { echo "$var is empty and is not string '0'"; }
В принципе, empty () делает то же самое, что:
if (!$var) ...
Но не вызывает уведомление PHP, когда переменная не задана.
Вы не можете. Из руководства
Возвращает FALSE, если var имеет непустое и ненулевое значение.
Следующие вещи считаются пустыми:
- "" (пустая строка)
- 0 (0 как целое число)
- «0» (0 в виде строки)
- НОЛЬ
- ЛОЖНЫЙ
- array () (пустой массив)
- var $ var; (объявленная переменная, но без значения в классе)
В обоих случаях empty()
вернет true
. Проверьте документ – http://php.net/empty .
Я предлагаю использовать другую функцию, соответствующую вашей спецификации.
empty
, безусловно, самая запутанная и бесполезная функция в репертуаре php. Не используйте его.
При проверке значения вы хотите знать три отдельные вещи.
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');
Я всегда добавляю к своей кодовой базе
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 года.
$var = '0'; // Evaluates to true because $var is empty if (empty($var) && $var !== '0') { echo '$var is empty or the string "0"'; }
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» и неустановленной переменной. нулевой()
Из руководства 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"); } } }
В этом случае не используйте пустой, используйте isset () вместо него. Это также позволит 0 как целое число.
$var = '0'; if (!isset($var)) { print '$var is not set'; } $var = 0; if (!isset($var)) { print '$var is not set'; }
Ничего не должно печатать.
Вы не можете, потому что 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'; }
или другие примеры 🙂
Спасибо за прочтение.
Если вы хотите пропустить пустой фильтр $ и не пропускать $ 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'; }