はじめに
久しぶりにpaizaのスキルチェックをPHPで受けようと思い立ったんですが、忘れている事が多々あったので備忘録を兼ねてPHPのサンプルコードを元にチートシートを作成しました。
標準入力・標準出力
ここの概念はスキルテストを行う上で重要ではありません。
スキルテストで求められていることは、後述するSTDINからfgetsメソッドで値を取得して、問題(テスト)を解いて、答えをechoで出力することです。
厳密な定義を調べるのに時間を割くのはやめましょう。
タイトル詐欺かと言われれば返す言葉がありません。
サンプルコード
2
2 5
3 4
hello = 2 , world = 5
hello = 3 , world = 4
<?php
$input_line = trim(fgets(STDIN));
for ($i = 0; $i < $input_line; $i++) {
$s = trim(fgets(STDIN));
$s = str_replace(array("\r\n","\r","\n"), '', $s);
$s = explode(" ", $s);
echo "hello = ".$s[0]." , world = ".$s[1]."\n";
}
?>
fgets
引数に指定したファイルポインタから1行取得する。
※サンプルコードでは「STDIN=ファイルポインタ」です。
※読みこむデータが無くなった場合はfalseを返します。
fgets(STDIN)
// 2
fgets(STDIN)
// 2 5
fgets(STDIN)
// 3 4
fgets(STDIN)
// false
trim
文字列の先頭および末尾にあるホワイトスペースを取り除く
下記のように文字列の間に存在するホワイトスペースは削除されません
trim(" 2 5 ")
// 2 5
// ※2と5の半角スペースは削除されていない
str_replace
第三匹数の文字列に存在する、第一引数を第二引数に変換する。
第一引数を配列にすることで複数指定も可能。
str_replace(array("\r\n","\r","\n"), '', '2 5')
// 文字列'2 5'の中に改行コードが存在すれば空文字に変換する(つまり改行コードの削除)
explode
第二引数を第一引数で区切った文字列を配列に格納して返却する
explode(" ", '2 5')
// 空文字で区切って格納するので'2'と'5'
// [2,5]
文字列連結
文字列をドットで連結出来ます。
変数も連結させることが出来ます。
当然、変数はダブルクウォートで囲む必要はありません。
最後に"\n"が無ければ、改行されずに一行で下記のようになってしまいます。
hello = 2 , world = 5hello = 3 , world = 4
サンプルコードで期待する出力は下記なので"\n"が必要です。
hello = 2 , world = 5
hello = 3 , world = 4
$s = [2,5]
"hello = ".$s[0]." , world = ".$s[1]."\n"
// hello = 2 , world = 5
最後に
どれも基礎的な内容ですが、スキルテストは実務では意外と使用頻度の低いメソッドや、意識することのない標準入力・標準出力といった概念が出てきます。
久々にスキルテストをやろうと思ったけど、ド忘れしたな〜って時に使っていただければ幸いです。