2017-06-15 90 views
0

我正在读取来自STDIN的输入,并且我想要查找给定输入的数据类型。如何找到PHP STDIN输入数据类型

下面是我的代码:

然后,

Input: 34 
Output: string 

任何人都可以请给任何想法?

+0

你试图删除'trim'? 'trim'的返回值总是一个字符串。 'fgets'总是返回一个字符串。 –

+0

我被删除修剪和检查,但相同的输出。 – KMS

+0

没有fgets()函数,那么我们将如何获得stdin的值? – KMS

回答

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为int喜欢$mystr = (int) $mystr,然后你可以得到的类型gettype($mystr)

如果你想检查,如果是JSON,你也可以尝试和反序列化,并设法找到任何问题,如果有的话,最有可能不是JSON。返回字符串作为后备。

你有一大堆的类型检查,如:

  • is_array
  • is_bool
  • is_int
  • IS_STRING
  • is_object
  • is_callable

铝对于你的STDIN场景,你只需要列表中的3/4。

+0

我试过这个,但是如果我使用** $ mystr =(int)$ mystr **并且输入为2表示,整数就是输出,如果我给“test”输入,那么gettype也只返回整数.. :(@Luis Lopes – KMS

+0

你需要在投入之前检查你的输入,你的输入总是一个字符串,字符串应该是你最后要检查的东西,我给了你必须实现的场景,你必须实现所有类型你想要的场景。 –

0

您可以使用Ctype库检查字符串的内容。在这种情况下,您可以使用ctype_digit()来检查输入是否只包含数字。

if (ctype_digit($mystr)) { 
    // looks like a non-negative integer 
    $value = (int)$mystr; 
} 

另一种方法是使用正则表达式几个语句来检查,如果字符串看起来像一个双精度值,布尔值,整数值,...