我正在读取STDIN的输入,我想找到给定输入的数据类型。
以下是我的代码:
<?php
$stdin = fopen('php://stdin', 'r');
$mystr = fgets($stdin);
echo gettype(trim($mystr));
fclose($stdin);
?>
然后,
Input: 34
Output: string
任何人都可以提出任何想法吗?
答案 0 :(得分:1)
<?php
$stdin = fopen('php://stdin', 'r'); // opens a pointer to memory
$mystr = fgets($stdin); // gets a STRING that you wrote
echo gettype(trim($mystr)); // returns STRING as is what php gets from you
fclose($stdin); // closes the pointer
?>
如果您想要返回该类型,则必须亲自手动检查。像
if (is_int($mystr)) {
return 'int';
}
if (is_bool($mystr) {
return 'bool';
}
if (is_string($mystr)) {
return 'string';
}
您也可以将$mystr
转换为类似$mystr = (int) $mystr
的int,然后您可以获得类型gettype($mystr)
如果您想检查是否是JSON,您还可以尝试对其进行反序列化并尝试查找任何问题,如果存在,则很可能不是JSON。返回字符串作为后备。
你有很多类型检查,例如:
对于STDIN中的场景,您只需要列表中的3/4。
答案 1 :(得分:0)
您可以使用Ctype库来检查字符串的内容。在这种情况下,您可以使用ctype_digit()
检查输入是否仅包含数字。
if (ctype_digit($mystr)) {
// looks like a non-negative integer
$value = (int)$mystr;
}
另一种方法是使用几个正则表达式语句来检查字符串是否看起来像双值,布尔值,整数值,......