最近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);
とし、改行コードを除くことで解決できた。