php 数据库 - is_int returns 始终为 false

php database - is_int returns false always

我写了一个简单的 sql 查询并且 is_int() returns 总是错误的。为什么?

mysql查询

$sql = "SELECT id, username FROM users WHERE email = 'mail@example.com' LIMIT 1"; 
$data = $db->query($sql); 
# output: php array like $data[0]['id'];

php 如果

if( is_int($data[0]['id'] ){
  print 1;
}else{
  print 0;
}

//编辑 var_dump 打印这个:

array(2) { ["id"]=> string(1) "1" ["username"]=> string(6) "admin" }

为什么 'id' 是字符串而不是整数?

我猜你的变量类型是字符串。 在你的情况下使用 is_numeric()

是个好主意

如果您希望有一些浮点值,您也可以使用 is_float()

if( is_numeric($data[0]['id']) && !is_float($data[0]['id']) ){
  print 1;
}else{
  print 0;
}

"id"怎么可能不是整数?

如果要检查值:

<?php
function is_int_val($val) {
    return $val == (string)((int)$val);
}
echo (is_int_val(33) ? "true" : "false")."\n"; // returns true
echo (is_int_val("33") ? "true" : "false")."\n"; // returns true
echo (is_int_val("33.0") ? "true" : "false")."\n"; // returns true
echo (is_int_val("a33") ? "true" : "false")."\n"; // returns false
echo (is_int_val("33a") ? "true" : "false")."\n"; // returns false

在字符串值 is_int() 的情况下总是 return false。

is_int('23') = bool(false)

根据评论,您的 ID 为字符串

array(2) { 
    ["id"]=> string(1) "1" 
    ["username"]=> string(6) "admin" 
}

所以它总是 return 错误

这样做:

if( is_array($data) && $data[0]['id'] > 0 ) {
    print 1;
} 
else print 0;