2017-06-15 95 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; 
} 

另一種方法是使用正則表達式幾個語句來檢查,如果字符串看起來像一個雙精度值,布爾值,整數值,...