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