8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

標準入力をwhile文で取得する際の注意点 備忘録

Last updated at Posted at 2017-03-27

最近PHPを勉強し始めました。

複数行にわたる標準入力を、while文を使って取得する際にうまく取得できなかったパターンがあるのでそれを備忘録として簡単にまとめました。

うまく取得できなかったパターン

 複数行の標準入力を取得しようとしたところ、「0」が含まれた際に「0」以下の値を取得できなかった。

while ($input = trim(fgets(STDIN))) {
    
  $num[] = $input;
   
}
    
print_r($num);


入力
1
2
0
3
4
5

結果
Array
(
    [0] => 1
    [1] => 2
)

原因

 while ($input = trim(fgets(STDIN)))の時点で「0」が入ってしまうとwhile(0)となってしまい、「0」は「偽」となってしまうため、whihle文を抜けてしまう。

解決策

while ($input = fgets(STDIN)) {
    
  $num[] = trim($input);
    
}
    
print_r($num);


入力
1
2
0
3
4
5

結果
Array
(
    [0] => 1
    [1] => 2
    [2] => 0
    [3] => 3
    [4] => 4
    [5] => 5
)

上記のように、while文の条件ではwhile ($input = fgets(STDIN))とし、改行コードを除かずに「0 + “\n”」のような状態をあえてつくり、配列に格納するときに$num[] = trim($input);とし、改行コードを除くことで解決できた。

8
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?