2017-06-15 5 views
0

Ich lese Eingabe von STDIN, und ich möchte den Datentyp des angegebenen Eingangs finden.Wie finde ich den PHP STDIN Eingabedatentyp

Unten finden Sie meine Code:

und dann

Input: 34 
Output: string 

Kann jemand bitte eine Idee geben?

+0

Sie die 'trim' zu entfernen versucht? Der Rückgabewert von 'trim' ist immer ein String. Das 'fgets' gibt immer eine Zeichenkette zurück. –

+0

Ich wurde Trim entfernt und überprüft, aber gleiche Ausgabe .. – KMS

+0

ohne fgets() -Funktion, wie erhalten wir dann den Wert in Stdin? – KMS

Antwort

1

Wenn Sie den Typ zurückgeben möchten, müssen Sie dies manuell überprüfen. Wie

if (is_int($mystr)) { 
    return 'int'; 
} 
if (is_bool($mystr) { 
    return 'bool'; 
} 
if (is_string($mystr)) { 
    return 'string'; 
} 

können Sie werfen auch Ihre $mystr wie $mystr = (int) $mystr in int und dann können Sie den Typ gettype($mystr)

bekommen Wenn Sie wollen überprüfen, ob JSON ist, können Sie auch versuchen, und unserialize es und versuchen, für jede zu finden Probleme, wenn es ist, ist höchstwahrscheinlich kein JSON. String als Fallback zurückgeben.

Sie haben eine Reihe von Typprüfungen, wie:

  • is_array
  • is_bool
  • is_int
  • is_string
  • is_object
  • is_callable

Al Für dein Szenario von der STDIN brauchst du nur die 3/4 von der Liste.

+0

Ich habe das versucht, aber wenn ich ** $ mystr = (int) $ mystr ** und Eingabe als 2 Mittel, ist Integer die Ausgabe, Wenn ich Eingabe als "Test" geben dann auch gettype nur Integer .. :(@Luis Lopes – KMS

+0

Sie müssen Ihre Eingabe überprüfen, bevor Sie sie umsetzen.Ihre Eingabe wird immer eine Zeichenkette sein, und Zeichenkette sollte die letzte Sache sein, die Sie überprüfen würden.Ich gab Ihnen die if Szenarien, die Sie implementieren müssen.Sie müssen alle Arten implementieren Szenarien, die Sie wollen. –

0

Sie können die Ctype-Bibliothek verwenden, um den Inhalt Ihrer Zeichenfolge zu überprüfen. In diesem Fall können Sie ctype_digit() verwenden, um zu überprüfen, ob die Eingabe nur Ziffern enthält.

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

würde Eine andere Möglichkeit, mehrere Regex-Anweisungen verwenden zu überprüfen, ob die Zeichenfolge wie ein doppelter Wert aussieht, einen Booleschen Wert, einen Integer-Wert, ...