2017-10-21 32 views
0

Le code est tiré de hackerrank.comComment lire des lignes distinctes à partir d'un fichier en PHP (fopen)

contenu dans le nom du fichier php://stdin

5 4 
1 2 3 4 5 

code:

<?php 

$handle = fopen ("php://stdin", "r"); 


fscanf($handle, "%i %i", $n, $d); 
$a_temp = fgets($handle); 
$a = explode(" ",$a_temp); 

print_r($a_temp); 

?> 

sortie :

1 2 3 4 5 

Je suis confus, pourquoi le code ne lit que la deuxième ligne (i.e 1 2 3 4 5), pas la première ligne? Comment lire les deux lignes? ou juste le premier?

+0

vous voulez dire: $ arr = [ \t 0 => '1 2 3 4 5', \t 1 => '5 4' ]; – Mohammad

+0

La sortie est: '1 2 3 4 5', echo = print_r ($ a_temp)' pas '$ a' –

+0

Pourquoi ce code lit-il toujours la deuxième ligne du fichier ??? –

Répondre

1

Le code fonctionne très bien.

Chaque fois que vous appelez fscanf vous lisez une ligne du fichier. Cela signifie que, après fscanf($handle, "%i %i", $n, $d) est exécuté, le pointeur de fichier saute à la deuxième ligne.

Vérifiez les variables $n et $d et les deux doivent être égales à 5 et 4, respectivement.


Si vous deviez lire et analyser toutes les lignes, évitez d'utiliser fscanf comme motif n'est pas la même pour chaque ligne:

$handle = fopen("php://stdin", "r"); 
while ($line = fgets($handle)) { 
    $a = explode(" ", $line); 
    var_dump($a); 
} 
1

Une autre façon de sortir

$handle = fopen ("php://stdin"); 

$numbers = str_replace("\n", ' ', $handle); 
$numbers = explode(' ', $numbers); 

foreach($numbers as $key => $value) 
    if($value == '') 
     unset($numbers[$key]); 

echo '<pre>'; 
print_r($numbers); 

Sortie:

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