【PHP】標準入力 – プログラムの実行中にコマンドラインから値を入力する

プログラムの実行中に値を入力する標準入力と呼ばれる仕組みがあります。

ここでは標準入力について解説します。

★ 内容

  • 標準入力

標準入力とは

標準入力はプログラムの実行中にコマンドラインから値を入力する仕組みです。

基本構文

標準入力の基本構文は次のようになります。

fgets(STDIN)

fgets(STDIN)を実行すると、コマンドラインで入力した値を取得します。
取得した値は変数に代入演算子で記憶することができます。

サンプルコード

標準入力のサンプルコードをご覧ください。

ソースコード

<?php

echo "--- please input ---\n";
$input = fgets(STDIN);

echo "--- input value ----\n";
echo $input;
echo "--------------------\n";

?>

4行目の$input = fgets(STDIN)で入力値を取得し、変数に記憶しています。

このコードを実行すると次のようになります。

コマンドライン

--- please input ---

3行目の出力で止まっています。
これはfgets(STDIN)によってプログラムが入力待ちになっているためです。

ここでは標準入力でHello Worldを入力します。
なお、入力値を決定するにはEnterキーを入力します。

コマンドライン

--- please input ---
Hello World
--- input value ----
Hello World
--------------------

2行目のHello Worldをキーボードで入力しています。
入力後、実行結果の通り、続く処理を実行し終了しています。

値のみ取得する

fgets(STDIN)は改行コードも取得します。
次のコードをご覧ください。

ソースコード

<?php

echo "--- please input ---\n";
$input = fgets(STDIN);

echo "input value is [ ". $input." ]\n";

?>

コマンドライン

--- please input ---
Hello World
input value is [ Hello World
 ]

入力した値をecho "input value is [ ". $input." ]\n"で出力していますが、Hello Worldのdの後で改行されています。
これは末尾に改行コード(\n)が入ってしまっているためです。

入力値のみ取得したい場合はtrim関数を使用します。
関数についてご存知でない方は、下記の書き方を覚えておきましょう。

trim(fgets(STDIN))

trim()の丸括弧の中に標準入力のfgets(STDIN)を記述します。
このようにすることで、入力値の前後の空白文字や改行コードを削除してくれます。

trim関数を上記コードで使うと次のようになります。

ソースコード

<?php

echo "--- please input ---\n";
$input = trim(fgets(STDIN));

echo "input value is [ ". $input." ]\n";

?>

コマンドライン

--- please input ---
Hello World
input value is [ Hello World ]

input value is [ Hello World ]が1行で出力されるようになりました。

このように値のみを取得したい場合はtrim関数を使うと良いでしょう。

複数回入力する

複数回、標準入力したい場合、while文を使うと相性が良いです。
入力値を使って終了判定を行うことで、任意の回数だけ繰り返し処理を行うことができます。

例えば、入力値にexitが入力されるまで実行するプログラムは次のようになります。

ソースコード

<?php

$input = '';

while( $input != 'exit' ) {
    echo "--- please input ---\n";
    $input = trim(fgets(STDIN));

    echo "input value is [ ". $input." ]\n";
}

echo "--- exit -----------\n";

?>

コマンドライン

--- please input ---
Hello World
input value is [ Hello World ]
--- please input ---
Technology
input value is [ Technology ]
--- please input ---
Hoge Hoge
input value is [ Hoge Hoge ]
--- please input ---
exit
input value is [ exit ]
--- exit -----------

ポイントは繰り返しの条件式に入力値を記憶する変数$inputを使用しているところです。
$input != 'exit'によりexitが入力されるまで繰り返し処理を実行するので、値を入力することができます。

演習問題

問題1

解答例

金額(税込)を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 金額(税込)は『金額(税抜)+ 金額(税抜)× 消費税率』で計算する
  • 金額(税抜)は標準入力で入力する
  • 消費税率は10%とする。

実行例1

コマンドライン

--- 金額(税抜)を入力してください。
> 1500
--- 金額(税込)は1650円です。

実行例2

コマンドライン

--- 金額(税抜)を入力してください。
> 36000
--- 金額(税込)は39600円です。

問題2

解答例

料金を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 料金は『単価 × 個数』で計算する
  • 単価と個数は標準入力で入力する

実行例1

コマンドライン

--- 単価を入力してください。
> 1200
--- 個数を入力してください。
> 7
--- 料金は8400円です。

実行例2

コマンドライン

--- 単価を入力してください。
> 1230
--- 個数を入力してください。
> 123
--- 料金は151290円です。

問題3

解答例

複数の数値の合計値を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 数値は標準入力で0が入力されるまで受け取る

実行例1

コマンドライン

--- please input ---
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 0
total : 45

実行例2

コマンドライン

--- please input ---
> 11
> 22
> 33
> 44
> 55
> 66
> 77
> 88
> 99
> 0
total : 495

まとめ

標準入力はプログラムの実行中にコマンドラインから値を入力する仕組みです。
コマンドラインから使うプログラムでは使うことがあるので覚えておきましょう。