Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What is going on with this article?
@ucan-lab

PHP Paiza 標準入力テンプレート

2021.02.12追記 PHP Paiza 自動テストテンプレート の記事を書きました。

標準入力が一行の場合

<?php declare(strict_types=1);

// 標準入力からの入力値を変数に代入します
$input = trim(fgets(STDIN));

// 取得した入力値を半角スペースで分解します
$inputs = explode(' ', $input);

// 単一行の入力の場合はこれだけで各入力値が配列の要素として使えます
var_dump($input);
var_dump($inputs);

標準入力が複数行の場合

<?php declare(strict_types=1);

// 標準入力を一行ずつ配列に代入します
while ($line = fgets(STDIN)) {
    $tmp[] = trim($line);
}

// 配列の各要素をさらに分解します
foreach ($tmp as $value) {
    $inputs[] = explode(' ', $value);
}

// 出力
var_dump($inputs);

ファイル読み込み(ローカルで確認したい時)

<?php declare(strict_types=1);

// ファイルパスの指定
$file = fopen('./stdin1.txt', 'r');
// $file = fopen('./stdin2.txt', 'r');

// ファイルの内容を一行ずつ配列に代入します
if ($file) {
    while ($line = fgets($file)) {
        $tmp[] = trim($line);
    }
}

// 配列の各要素をさらに分解します
foreach ($tmp as $value) {
    $inputs[] = explode(' ', $value);
}

// ファイルパスを閉じる
fclose($file);

// 出力
var_dump($inputs);

解説

$input = trim(fgets(STDIN));

STDIN とは

STDINstandard input(標準入力) の意味です。
ターミナルで入力した文字を標準入力としてPHPへ渡す形になります。

fgets とは

第一引数に指定したファイルポインタから1行取得し、その文字列を返します。
https://www.php.net/manual/ja/function.fgets.php

STDIN という標準入力を表す定数を渡しているので、標準入力から1行取得します。

trim とは

第一引数に指定した文字列の先頭および末尾にあるホワイトスペースを取り除き、その文字列を返します。
https://www.php.net/manual/ja/function.trim.php

試してみる

$ php -r "var_dump(fgets(STDIN));"
test
string(5) "test
"
  • php -r オプションでPHPコードの文字列を渡すと実行できます。
    • 手軽にコードを試せるのでオススメです。

test を入力すると test と改行コードが入っています。

$ php -r "var_dump(trim(fgets(STDIN)));"
test
string(4) "test"

trim を使用することで余計な改行コードが削除されています。

参考記事

16
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ucan-lab
Backend Developer at ROLO. I love PHP and I'm focusing on Laravel, Docker, GraphQL.
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
16
Help us understand the problem. What is going on with this article?