2016-12-02 4 views
3

Beispiel:PHP - Array mit stdin ganzzahlige Eingang gefüllt

$_fp = fopen("file.txt", "r"); 
/* STDIN = "4 7 6 24 1"; */ <== user input 

$input[] = fgets($_fp); 
print_r($input); 

OUTPUT:

Array 
(
    [0] => 4 7 6 24 1 
) 

gewünschter Ausgang:

Array 
(
    [0] => 4 
    [1] => 7 
    [2] => 6 
    [3] => 24 
    [4] => 1 
) 

Gibt es eine Methode Räume von ganzzahligen Eingabe zu entfernen, nachdem jedes in ein Array eingeben? In einer Weise, die gesamte Eingabe als eine einzige Zeile zu vermeiden.

i verwenden jetzt $input[] = explode(' ', trim(fgets($_fp))); wenn zweite Linie ist es nur die erste Zeile des STDIN i alle Zeilen und sie lesen müssen setzt Variable in den Eingang für Echo

while($f = fgets(STDIN)){ echo "line: $f"; } ist großer Einsatz hier es in Ordnung ist, setzen Alle Linien aber kippen jede Zeile zu einer Variablen oder Array noch nicht sicher .. zuweisen, wenn i sollte array_push() da i 2 Zeilen als Variablen benötigen, und als Arrays ruht ..

Antwort

1

Verwendung trim die „\ n“ des Lösch Zeile, die Verwendung explode, um es in Array zu konvertieren.

Live Demo

$input = explode(' ', trim(fgets($_fp))); 

, wenn Sie mehrere Zeilen hat, verwenden Sie unter:

$input[] = explode(' ', trim(fgets($_fp))); 
+0

seine funktioniert! aber ist es effizient, auf Werte über $ input statt $ input [0] zuzugreifen, da. print_r ($ input); Array ( [0] => Array ( [0] => 4 [1] => 7 [2] => 6 [3] => 24 [4] => 1 ) ) zum Beispiel $ sum = array_sum ($ input); = // 0 –

+0

Ich gebe Ihnen zwei Versionen, wenn Sie nur eine Zeile haben, verwenden Sie die erste. –

+0

Array haben sehr hohe Leistung Zugriff auf Elemente –

1

Auch können wir versuchen, preg_match_all mit REGx auch gleiche Ergebnis mit allen solchen Fällen, was geben, wenn Sie Doppel Platz haben oder beliebiger Text zwischen den Interger Strings

$string = "4 7 6 24 1"; 
$string = "4 test df 7 6 24 1"; 
$string = "4 7 6 24 1"; 
preg_match_all('!\d+!', $string, $matches); 

print_r($matches);