途中に空行を含む標準入力を最後まで読み込む、というのをwhile/fgets(STDIN)/trimで書こうとしたら少しハマった。
- こんな標準入力だと仮定して
0 hoge
- 結局、下記のように書いてFix
-
<?php // 標準入力から1行データを取得 $input = fgets(STDIN); // $inputの値が空で無ければループする while( $input != "" ) { // 配列に$inputの値を追加 $array[] = trim($input); // 標準入力から1行データを取得 $input = fgets(STDIN); } print_r($array); ?>
- 追記
- while ( $input != "" ) でなくて、while ( $input ) であれば十分でした。。。
trimしないことで、改行コードが残るんで。 - 注意点
- 「改行コード」をtrimして変数に代入した場合、その変数は定義済みだが「空」であること(nullじゃない)
- 判定前にtrimしてしまうと改行コードも空に成ってしまい、データがないことによる「空」と区別がつかない
- 配列に改行コードは入れたくない
こちらのサイトを参考にさせてもらいました。
Allied ArchitectsEngineer Blog 空文字とかNULLとか0とか
おまけ
自分でも少し検証してみました。
まぁ、そうなりますよね。
"0" if ( $a ) : false if ( $a == "" ) : false if ( $a === "" ) : false if ( is_null($a) ) : false ******************************* null if ( $a ) : false if ( $a == "" ) : true if ( $a === "" ) : false if ( is_null($a) ) : true ******************************* trim("\n") if ( $a ) : false if ( $a == "" ) : true if ( $a === "" ) : true if ( is_null($a) ) : false ******************************* "" if ( $a ) : false if ( $a == "" ) : true if ( $a === "" ) : true if ( is_null($a) ) : false ******************************* "\n" if ( $a ) : true if ( $a == "" ) : false if ( $a === "" ) : false if ( is_null($a) ) : false ******************************* 0 if ( $a ) : false if ( $a == "" ) : true if ( $a === "" ) : false if ( is_null($a) ) : false
-
$a = "0"; echo "\"0\""."\n"; if ( $a ) { echo "if ( \$a ) : true\n"; } else { echo "if ( \$a ) : false\n"; } if ( $a == "") { echo "if ( \$a == \"\" ) : true\n"; } else { echo "if ( \$a == \"\" ) : false\n"; } if ( $a === "") { echo "if ( \$a === \"\" ) : true\n"; } else { echo "if ( \$a === \"\" ) : false\n"; } if ( is_null($a) ) { echo "if ( is_null(\$a) ) : true\n"; } else { echo "if ( is_null(\$a) ) : false\n"; } echo "*******************************\n"; $a = null; echo "null"."\n"; if ( $a ) { echo "if ( \$a ) : true\n"; } else { echo "if ( \$a ) : false\n"; } if ( $a == "") { echo "if ( \$a == \"\" ) : true\n"; } else { echo "if ( \$a == \"\" ) : false\n"; } if ( $a === "") { echo "if ( \$a === \"\" ) : true\n"; } else { echo "if ( \$a === \"\" ) : false\n"; } if ( is_null($a) ) { echo "if ( is_null(\$a) ) : true\n"; } else { echo "if ( is_null(\$a) ) : false\n"; } echo "*******************************\n"; // $a = ""; $a = trim("\n"); echo "trim(\"\\n\")"."\n"; if ( $a ) { echo "if ( \$a ) : true\n"; } else { echo "if ( \$a ) : false\n"; } if ( $a == "") { echo "if ( \$a == \"\" ) : true\n"; } else { echo "if ( \$a == \"\" ) : false\n"; } if ( $a === "") { echo "if ( \$a === \"\" ) : true\n"; } else { echo "if ( \$a === \"\" ) : false\n"; } if ( is_null($a) ) { echo "if ( is_null(\$a) ) : true\n"; } else { echo "if ( is_null(\$a) ) : false\n"; } echo "*******************************\n"; $a = ""; echo "\"\""."\n"; if ( $a ) { echo "if ( \$a ) : true\n"; } else { echo "if ( \$a ) : false\n"; } if ( $a == "") { echo "if ( \$a == \"\" ) : true\n"; } else { echo "if ( \$a == \"\" ) : false\n"; } if ( $a === "") { echo "if ( \$a === \"\" ) : true\n"; } else { echo "if ( \$a === \"\" ) : false\n"; } if ( is_null($a) ) { echo "if ( is_null(\$a) ) : true\n"; } else { echo "if ( is_null(\$a) ) : false\n"; } echo "*******************************\n"; $a = "\n"; echo "\"\\n\""."\n"; if ( $a ) { echo "if ( \$a ) : true\n"; } else { echo "if ( \$a ) : false\n"; } if ( $a == "") { echo "if ( \$a == \"\" ) : true\n"; } else { echo "if ( \$a == \"\" ) : false\n"; } if ( $a === "") { echo "if ( \$a === \"\" ) : true\n"; } else { echo "if ( \$a === \"\" ) : false\n"; } if ( is_null($a) ) { echo "if ( is_null(\$a) ) : true\n"; } else { echo "if ( is_null(\$a) ) : false\n"; } echo "*******************************\n"; $a = 0; echo "0"."\n"; if ( $a ) { echo "if ( \$a ) : true\n"; } else { echo "if ( \$a ) : false\n"; } if ( $a == "") { echo "if ( \$a == \"\" ) : true\n"; } else { echo "if ( \$a == \"\" ) : false\n"; } if ( $a === "") { echo "if ( \$a === \"\" ) : true\n"; } else { echo "if ( \$a === \"\" ) : false\n"; } if ( is_null($a) ) { echo "if ( is_null(\$a) ) : true\n"; } else { echo "if ( is_null(\$a) ) : false\n"; } ?>
0 件のコメント:
コメントを投稿