【发布时间】:2018-10-03 20:45:51
【问题描述】:
我有一个简单的 PHP 脚本:
<?php
$input = readline();
echo gettype($input);
?>
它从控制台读取用户输入。我想要实现的是获得正确的数据类型。目前 $input 是字符串类型。
我需要这样的东西:
Input Output
5 Integer
2.5 float
true Boolean
我不知道该怎么做。谢谢。
编辑:感谢@bcperth 的回答,我实现了这个工作代码:
<?php
while(true) {
$input = readline();
if($input == "END") return ;
if(is_numeric($input)) {
$sum = 0;
$sum += $input;
switch(gettype($sum)) {
case "integer": $type = "integer"; break;
case "double": $type = "floating point"; break;
}
echo "$input is $type type" . PHP_EOL;
}
if(strlen($input) == 1 && !is_numeric($input)) {
echo "$input is character type" . PHP_EOL;
} else if(strlen($input) > 1 && !is_numeric($input) && strtolower($input) != "true" && strtolower($input) != "false") {
echo "$input is string type" . PHP_EOL;
} if(strtolower($input) == "true" || strtolower($input) == "false") {
echo "$input is boolean type" . PHP_EOL;
}
}
?>
也试过filter_var,效果很好:
<?php
while(true) {
$input = readline();
if($input == "END") return;
if(!empty($input)) {
if(filter_var($input, FILTER_VALIDATE_INT) || filter_var($input, FILTER_VALIDATE_INT) === 0) {
echo "$input is integer type" . PHP_EOL;
} else if(filter_var($input, FILTER_VALIDATE_FLOAT) || filter_var($input, FILTER_VALIDATE_FLOAT) === 0.0) {
echo "$input is floating point type" . PHP_EOL;
} else if(filter_var($input, FILTER_VALIDATE_BOOLEAN) || strtolower($input) == "false") {
echo "$input is boolean type" . PHP_EOL;
} else if(strlen($input) == 1) {
echo "$input is character type" . PHP_EOL;
} else {
echo "$input is string type" . PHP_EOL;
}
}
}
?>
【问题讨论】:
-
用户输入总是一个字符串。您可以使用
is_numeric()检查此字符串是否包含数字,但这不区分整数和浮点数。 -
ctype_digit()可能也值得一看,它会为整数返回 true,为浮点数返回 false,因为浮点数将包含小数分隔符。另一方面,所有整数也是有效的浮点数... -
@KarstenKoop
ctype_digit()不适用于负数 -
远离目标的简单搜索 :: stackoverflow.com/questions/2690654/…
-
@VayuDev bcperth 给出的答案比你所链接的问题中的那个可怜的答案要有效得多
标签: php