我正在读取来自STDIN的输入,并且我想要查找给定输入的数据类型。如何找到PHP STDIN输入数据类型
下面是我的代码:
然后,
Input: 34
Output: string
任何人都可以请给任何想法?
我正在读取来自STDIN的输入,并且我想要查找给定输入的数据类型。如何找到PHP STDIN输入数据类型
下面是我的代码:
然后,
Input: 34
Output: string
任何人都可以请给任何想法?
<?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
为int喜欢$mystr = (int) $mystr
,然后你可以得到的类型gettype($mystr)
如果你想检查,如果是JSON,你也可以尝试和反序列化,并设法找到任何问题,如果有的话,最有可能不是JSON。返回字符串作为后备。
你有一大堆的类型检查,如:
铝对于你的STDIN场景,你只需要列表中的3/4。
我试过这个,但是如果我使用** $ mystr =(int)$ mystr **并且输入为2表示,整数就是输出,如果我给“test”输入,那么gettype也只返回整数.. :(@Luis Lopes – KMS
你需要在投入之前检查你的输入,你的输入总是一个字符串,字符串应该是你最后要检查的东西,我给了你必须实现的场景,你必须实现所有类型你想要的场景。 –
您可以使用Ctype库检查字符串的内容。在这种情况下,您可以使用ctype_digit()
来检查输入是否只包含数字。
if (ctype_digit($mystr)) {
// looks like a non-negative integer
$value = (int)$mystr;
}
另一种方法是使用正则表达式几个语句来检查,如果字符串看起来像一个双精度值,布尔值,整数值,...
你试图删除'trim'? 'trim'的返回值总是一个字符串。 'fgets'总是返回一个字符串。 –
我被删除修剪和检查,但相同的输出。 – KMS
没有fgets()函数,那么我们将如何获得stdin的值? – KMS