如何找到PHP STDIN输入数据类型

时间:2017-06-15 08:00:29

标签: php stdin

我正在读取STDIN的输入,我想找到给定输入的数据类型。

以下是我的代码:

<?php
  $stdin = fopen('php://stdin', 'r');
  $mystr = fgets($stdin);
  echo gettype(trim($mystr));
  fclose($stdin);
?>

然后,

Input:  34
Output: string

任何人都可以提出任何想法吗?

2 个答案:

答案 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。返回字符串作为后备。

你有很多类型检查,例如:

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

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

答案 1 :(得分:0)

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

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

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