2017-10-21 54 views
0

的代碼是從hackerrank.com採取如何從文件中讀取單獨的行中

裏面的內容的文件名php://stdin

5 4 
1 2 3 4 5 

代碼PHP(FOPEN):

<?php 

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


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

print_r($a_temp); 

?> 

輸出:

1 2 3 4 5 

我很困惑,爲什麼代碼只讀第二行(i.e 1 2 3 4 5),而不是第一行?如何閱讀這兩行?或者只是第一個?

+0

你的意思是:$ arr = [ \t 0 =>'1 2 3 4 5', \t 1 =>'5 4' ]; – Mohammad

+0

輸出是:'1 2 3 4 5',echo = print_r($ a_temp)'不'$ a' –

+0

爲什麼這段代碼總是讀取文件的第二行? –

回答

1

代碼工作得很好。

每次撥打fscanf時您正在閱讀的一行文字。這意味着,執行fscanf($handle, "%i %i", $n, $d)後,文件指針跳轉到第二行。

檢查變量$n$d,兩者應分別等於54


如果你閱讀和分析所有線路,避免使用fscanf的模式不是每行的相同:

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

另一種方式來擺脫

$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); 

輸出:

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