我正在讀取來自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