如何从PHP中的文件中读取单独的行(fopen)

时间:2017-10-21 09:26:25

标签: php

代码取自hackerrank.com

文件名php://stdin

内的内容
5 4
1 2 3 4 5

代码:

<?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),而不是第一行?如何阅读这两行?还是只是第一个?

2 个答案:

答案 0 :(得分:2)

代码工作正常。

每次拨打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 :(得分: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
)