プログラミング講座

標準入力とは?PHPで標準入力の値を取得する方法(サンプルコードあり)

 

とうふ
とうふ
どうも、Webエンジニアのとうふです。

paizaのテストや競技プログラミングでも用いられている標準入力。

今回は、標準入力とは何か?どうやって値を取得して表示するのか?をPHPのサンプルコードと共に詳しく解説していきます!

標準入力とは?

プログラムに渡される値やデータの標準(デフォルト)の入力元のことです。
標準の入力経路というのは、基本的には「キーボードからの入力」を意味します。

「データは標準入力により渡されます」の場合
「データはキーボードから入力されます」といった意味になります。

ただし、場合によって入力経路が異なる場合があるので注意です。
(例えばファイルからのデータ読み込みなど)

標準入力 = standard input の意味で、stdinと略されて使用されることが多いです。

とうふ
とうふ
標準入力とは、値やデータなどが入ってくる経路(入力元)だと思っておけばOK…!

参考記事として、実際に読んで分かりやすかった解説を載せておきます。

 

標準入力の値を取得する方法

説明だけではイメージが付きづらいと思うので、実際に標準入力を使って値を受け取る処理を実行してみましょう!

まずは、下記のようなコードを書いてみます。

test.php
<?php
echo 'Please enter: ';
$stdin = trim(fgets(STDIN));
var_dump($stdin);

test.phpを実行すると、「Please enter: 」が表示されて文字を入力することができます。
好きな文字を入力してエンターを押すと、入力した文字が表示されます。

とうふ
とうふ
キーボードで入力した「aaa」を受け取って、var_dumpで表示できたね…!
まよい羊
まよい羊
なるほど、標準入力ってこういうことなんだメェ
とうふ
とうふ
そうだよ…!標準入力で入力された値の受け取り方の部分を解説するね…!

fgets(STDIN)の解説

$stbin = trim(fgets(STDIN));

標準入力された値を取得しているのがこの部分です。

fgets()関数で、標準入力された1行目を取得しています。
fgets()は改行も含めて取得するので、trim()で取り除いています。

trim() 第一引数に指定した文字列の先頭および末尾にあるホワイトスペースを取り除き、その文字列を返します。
fgets() 第一引数に指定したファイルポインタから1行取得し、その文字列を返します。
STDIN 標準入力を表す定数
自動的に標準入力の値が入ります。

 

標準入力で複数行を取得する場合

次は下記のような複数行の値を用意してみます。

apple
orange
grape
peach

先程のプログラムだと最初1行目の「apple」しかvar_dump()されないはずです。
では、複数行の値を一気に入力して処理したい場合はどうすれば良いのでしょうか?

サンプルコード&解説

【方法①】
複数行の値を処理したい場合は、whileを利用します。

test.php
<?php
while (!feof(STDIN)) {
    $line = trim(fgets(STDIN));
    var_dump($line);
}

feof関数で値の最終行になるまでwhileでループ処理を行うことで、1行ずつ処理することができます!

while() PHPで最も簡単なタイプのループ処理です。
与えられた式の値がTRUEである間、ループ内の処理を繰り返します。
式の値が初めからFALSEの場合、内部の文は1回も実行されません。
ループ処理の仲間:do-while(), for(), foreach 等
feof() ファイルポインタがファイルの最後(またはエラー)に達している場合TRUE、そのほかの場合はFALSEを返す。

【方法②】
入力された値を配列にしてforeachを利用する方法もあります。

test.php
<?php
while ($line = fgets(STDIN)) {
    // 配列を生成する
    $array[] = trim($line);
}
    
foreach ($array as $row) {
    // ここで処理する
}
とうふ
とうふ
入力された値を配列に加工すると、あとで複雑な処理がしやすくなるね…!

まとめ:練習にpaizaや競技プログラミングもおすすめ

いかがでしたでしょうか?

ちなみに冒頭でも話したpaizaとは、ランクに分けられたプログラミングスキルチェックを受けることで、自分のプログラミングの実力を目に見える形で診断できるものです。

また、そのコードが実際に就職の判断材料となり、書類選考無しで面接に進むことができるなど、書いたコードを元に始める新しい形の転職サービスです。

まよい羊1
まよい羊1
転職を考えているけど、自分の実力が他社に通用するか分からないメェ…
まよい羊2
まよい羊2
実務未経験だけど、独学で勉強しているけどなかなか就職に繋がらないメェ…
とうふ
とうふ
そんなときも、paizaでスキルチェックを受けることで自分のプログラミングスキルを知ったり、実際に書いたコードを元に就職活動ができるよ…!

さらに、繰り返し問題を解くことでスキルアップにも繋がります。

なぜpaizaの話をしたかと言うと、paizaのスキルチェックテストでも「標準入力」というものが使われており、私自身も以前クラウドソーシングで応募した案件の条件としてpaizaのテストを受け、指定された問題を解いてかかった時間と実行結果・コードを提出することがありました。

それを受けたことで自分の実力も分かり、以後空いた時間によくテストを受けています。
コードを書くこともそうですが、特にロジックを考える力がとても鍛えられるのでおすすめです!

標準入力とはどのようなものか?また、どのように扱えば良いのかがの理解が深まれば幸いです。

とうふ
とうふ
それではまた…!