はじめに
この記事ではpaizaのスキルチェック(PHP)で僕がよく使ったものを一覧にしてまとめています。
主にDランク・Cランクの問題を解くことを想定していますので、参考になれば幸いです。
また間違っている箇所などありましたらご指摘いただけると幸いです。
随時更新していく予定です。
基本系
trim
文字列の先頭および末尾にあるホワイトスペース(空白)を取り除く。
※paizaではプログラムエラーの原因になることがあるので無条件で入れると良い。
$input_line = trim(fgets(STDIN));
explode
" "で指定したもの(ここでは半角スペース)で文字列を分割して「配列」にする関数。
$input_line = fgets(STDIN);
//$input_line -> "250000 3"
$arr = explode(" ",$input_line);
//$arr -> ["250000","3"]
//1行で書くと↓
$arr = explode(" ", trim(fgets(STDIN)));
var_dump
デバッグ(プログラムの間違いを直すこと)に使う。
echoと違い配列の中身のデータ型などを細かく確認できる。
var_dump($arr);
print_r
デバッグに使う。
var_dumpと違い配列のキーと値だけを確認したい時に使う。
変数に代入も可。
print_r($arr);
die
プログラムを途中で終了する時に使う。
プログラムの途中でデバッグをしたい時に便利。
echo 'ハンバーグ';
die;
echo 'カレー';
//出力結果「ハンバーグ」
便利な書き方
配列の初期化
//空の配列を作成
$a = [];
//値を代入して初期化
$a = ['てぃー','30歳', '東京都'];
//キーと値を指定して初期化(連想配列)
$a = ['name'=>'てぃー', 'age'=>'30歳', 'address'=>'東京都'];
配列に値を追加する
$a = ['ハンバーグ'];
//追加したい配列[] = 要素
$a[] = 'サラダ', 'ドリングバー';
//他にも↓
array_push($a, 'サラダ', 'ドリングバー');
要素を順番に配列に追加する
for ($i = 0; $i < 5; $i++) {
$arr[] = trim(fgets(STDIN));
}
配列の値をそれぞれ変数に定義する(explode)
$input_line = trim(fgets(STDIN));
[$a, $b] = explode(" ",$input_line);
該当する出力が無い場合に指定の値を表示する
隠れ変数を使う。
主にfor文の中で使われる。
$sum = 0;
$a = "ガパオライス";
if(strpos($a,"カレー") !== false){
//$aの中に'カレー'が含まれている場合
echo "カレーという文字がありました";
$sum += 1;
}
if ($sum == 0) {
echo "None";
}
//出力結果「None」
if文 × 論理値 × 変数
変数に論理値を代入することもできる。
$tmp = true
if ($tmp) {
echo "trueの場合のみ出力されます"
}
よく使う関数
str_split
文字を分割して配列に追加する。
$input_line = trim(fgets(STDIN));
$arr = str_split($input_line);
str
n番目の文字を取得する。
$str = "ABCDEFG";
echo $str[2];
//実行結果→「C」
range
A〜Zなどの規則的に続く文字をそれぞれ配列に追加する。
$a = range('A', 'Z');
print_r($a);
//実行結果
//Array
//( [0] => A
// [1] => B
// [2] => C
// ・
// ・
// ・
//)
array_search
配列の値を検索する。
$result = array_search($input_line, $a);
//配列$aの何番目に$input_lineの値があるかを調べる
in_array
複数の値で配列を検索する。
$a = array(1, 2, 3);
if (in_array(2, $a, true) {
echo "2が含まれています";
}
//実行結果「2が含まれています」
strops
検索対象文字列に対して、検索文字列があるかどうかを判定して、あればその場所を数値で返す。無ければFALSEを返す。
※条件式では!==や===を使う必要がある。
$a = "カレーライス";
if(strpos($a,"カレー") !== false){
//$aの中に'カレー'が含まれている場合
echo "カレーという文字がありました";
}
abs
絶対値を求める。
$a = abs(-100);
echo $a;
//実行結果「100」
min max
配列の中にある数値から最大値・最小値を出力する。
$arr = array(-15, 132, 68);
echo max($arr);
//実行結果「132」
floor・ceil・round
小数点以下を切り捨て(floor)・切り上げ(ceil)・四捨五入(round)する。
$num = 12.5;
echo floor($num); //実行結果「12」
echo ceil($num); //実行結果「13」
echo round($num); //実行結果「13」
sqrt
平方根を求める。
echo sqrt(9); // 3
echo sqrt(10); // 3.16227766 ...
str_replace
特定の文字を置き換える
str_replace('検索文字列', '置き換えたい文字列', '対象の文字列')
'対象の文字列'は配列も使用可能
$name = "カレーライス";
$except ="ライス";
$name = str_replace($except, '', $name);
echo $name; //実行結果「カレー」
pregmatch
正規表現で幅広く使うことができる。
以下の例では1桁の整数かどうかを判別することができる。
$num = 7
if(preg_match("/^[0-9]+$/", $num)){
echo $num.'は整数です';
} //実行結果「7は整数です」
implode
配列の中身を任意の文字列と連結して一つの文字列にすることができる。
explode関数の逆。
$array = ["カレー","ハンバーグ","アヒージョ"];
$foods = implode("と", $array);
echo "好きな食べ物は".$foods."です";
//実行結果「好きな食べ物はカレーとハンバーグとアヒージョです」
応用編
三項演算子
条件式を評価し、TRUEであれば式1、FALSEであれば式2を返す。
if..elseの構文に似ているが、演算子の1つなので式を返す点で異なる(if文は条件に応じた処理を記述する)
$lang = 'En';
$msg = $lang == 'Jp' ? 'こんにちは' : 'Hello';
//$lang=='Jp'がTRUEならば'こんにちは'、FALSEならば'Hello'を変数$msgに格納
print $msg;
//実行結果「Hello」
foreach文
配列の要素を順番に取り出してそれらを表示する。
$scores = [89, 76, 35];
foreach ($scores as $score) {
echo $score; //要素の数、繰り返し実行する
}
//書き換えると↓
$scores = [89, 76, 35];
$score = $scores[0];
echo $score;
$score = $scores[1];
echo $score;
$score = $scores[2];
echo $score;
二次元配列(多次元配列)
配列の中に配列を作ることができる。
二次元以上の配列を多次元配列と言う。
$array = [ ['カレー','500円'], ['ハンバーグ','800円'], ['アヒージョ','400円'] ];
echo $array[0][1];
//実行結果「500円」