【初心者向け】PHPで標準入力を受け取る方法をわかりやすく解説

今回はAtCoderやPaizaなどで使える、PHPで標準入力を使う方法を解説します。

目次

一行だけ取得

まず一番基本になるのは、入力から一行だけ取得する方法です。

下記のコードで取得できます。

$value = trim(fgets(STDIN));

trim,fgets,STDINとは?

trimは文字列の先頭と末尾から余計な空白を取り除くための関数です。

余計な空白とは、「半角スペース」や「タブ」のことを指しています。

標準入力を取得したときに、余計な空白が入ってることでバグらないために書きます。

fgetsはファイルから一行だけ読み込むとだけ覚えておけば大丈夫です。

STDINは「スタンダードイン」と読み、標準入力のことを指します。

つまり下記のコードは

trim(fgets(STDIN));

標準入力から一行だけ読み込んで、不要な空白を削除したもの」という意味になっているわけですね。

これを使うと、例えば標準入力が

Hello

だった場合は、

$value = trim(fgets(STDIN));
echo $value;

とすれば、出力は

Hello

となります。

まとめ

標準入力から一行だけ取得するには
trim(fgets(STDIN));

なるほど簡単

ちなみに

仮に入力が下記のように2行あるとします。

12
34

この場合に下記のようなコードにすると

$value1 = trim(fgets(STDIN));
$value2 = trim(fgets(STDIN));
echo $value1;
echo $value2;

出力は下記のようになります。

12
34

これはなぜなのでしょうか?

一行だけ取得するはずのコードを2回書いただけなのに、なぜちゃんと2行目が認識されているのでしょうか?

実はこれはコード内でfgets(STDIN)関数が連続して2回呼び出されているから、という単純な理由です。

ちゃんと自動で一行ずつ見てくれるので、「2行目を見て!」と指示を明確に書かなくても、

勝手に関数が呼び出された順番に行を読み取ってくれるんですね。(かしこい)

これはPHPに限った挙動ではありません。Pythonなど他の言語でも同様の挙動をします。

Pythonだとこんな感じ↓

value1 = input().strip()
value2 = input().strip()
print(value1)
print(value2)

なんかおまけが長くなっちゃいました。

こういうもんだよ~くらいで覚えておいてください。

勉強になったっす

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次