php:'0' как строка с пустой()
Вопрос
Я хочу, чтобы 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 ()
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).
Также я сделал пользовательскую функцию для проверки всех вещей.
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';
}