PHP勉強2日目まとめ

燐華

ノートにまとめたものをこちらにも書いていくスタイル パート2
後々、逆引き用のまとめページも作るよ

連続した文字を出力

地道に繋げる for文+.=

結合代入演算子を使うとfor文を回している間連結していく。
.=は、$result = $result . "*";と同じ形。

<?php
$result = "";
for(~){
  $result .= "*";
}
echo $result;
?>

ちなみに、for文に「$result = "";」を宣言しておかないとfor文の外で使うこと(echo出力とか)ができない。エラー(正確にはWarning[警告])はかれる。予期しない動作の原因になるらしい。

燐華

ガチ焦りする。初期化大事。

簡単だねリピート関数 str_repeat()

for文を使うほどでもないなって時(簡単な文字を〇回分繰り返すとか)はこっちを使うと処理が速い。

<?php
echo str_repeat("*", 10); // *が10個リピートされる
?>

文字列で最後の1文字を取得

substr():指定した半角英数字文字列の最後の1文字を取得。

<?php
substr("指定文字列", 負の値); //負の値を指定すると最後から〇番目を取得になる
/* --- 実際の出力 --- */
echo substr("Apple", -1); //出力:e
?>

マルチバイトなら?日本語は?

mb_substr();を使用。substrは半角英数のみのため、全角文字を扱うと文字化けしてしまう。また、日本語(マルチバイト)の時は、mb_がつく。

<?php
mb_substr("指定文字列", -1, 1, "UTF-8");
/* --- 実際の出力 --- */
echo mb_substr("りんご", -1, 1, "UTF-8"); //出力:ご
echo mb_substr("りんご", -1); //出力:ご
?>

1番目の指定文字列、2番目に取り出し開始位置指定(負の値を使い最後から〇番目)までは一緒だが、3番目に取り出す文字数、4番目に文字コードを指定する。

mb_substr("文字列", -1) のように、2番目の引数だけで止めても「最後から1文字目以降のすべて」を取得できる。

燐華

ちなみに、PHP8.0以降では文字コードを省略しても自動判別してくれるらしい。


小数点以下を切り捨てて整数

小数点以下を切り捨てて整数にするには3種類方法がある。

  • floor():小数部分を切り捨て【float型】
  • intval():浮動小数値→整数値へ単純切り捨て【int型】
  • (int)キャスト:intvalと挙動は一緒【int型】
<?php
/* --- floor() --- */
echo floor(3.1); //出力:3
echo floor(-3.9); //出力:4 数値線上で左側(より小さい)整数になる

/* --- intval() --- */
echo intval(3.9); //出力:3
echo intval(-3.9); //出力:3

/* --- (int) --- */
echo (int)3.9; //出力:3
?>

intval()|(int):0に向かって切り捨てる(単純に少数を消す)。

floor:マイナス無限大に向かって切り捨てる


小数点以下切り上げ

  • ceil():小数点以下を切り上げる。戻り値はfloat型
<?php
echo ceil(4.3);    //出力:5
echo ceil(9.999);  //出力:10
echo ceil(-3.14);  //出力:-3
?>

小数点以下の四捨五入

四捨五入したい場合はround()を使う。

round():小数点第1位を四捨五入(デフォルト値)

<?php
echo round(3.1413); //出力:3
echo round(3.9581); //出力:4
?>

小数点第2位や、小数点第3位を四捨五入したい場合は以下の通り。

<?php
round(数値, 小数点以下の残したい桁数); //小数点第〇位を四捨五入
/* --- 実際の出力 --- */
echo round(3.1415, 2); //出力:3.14→小数点第2位までを残す(第3位を四捨五入)
?>
燐華

round()の第2引数に負の数字を入れると、10の位、100の位で四捨五入できるらしい

金額の端数計算とかでいいかもね。ただし、戻り値はfloat型なので注意。
また、.5 はデフォルトでは切り上げ(モード設定で挙動も変えれる?)

<?php
round(1234, -2); //1200
?>

値の真ん中を取得したい

sort($配列名, $flags = SORT_REGULAR):配列の中身を昇順に並べる。(降順の場合は、rsortになる)

第2引数でソートの動作を修正できる。割と使うであろうモノは以下の通り

  • SORT_NUMERIC:数値として項目を比較。確実に数値が小さいもの順になる。
  • SORT_STRING:データを文字列として項目を比較。100と15という文字を、2つ目の文字 0と5を比較して、0が小さいから100,15の順にsortされる。

順番に並べてから取得していく。

<?php
//入力文字:1 5 3
$array = explode(" ", trim(fgets(STDIN))); //入力文字を配列に入れる。
sort($array); //真ん中を出力する→$array[1]
?>

真ん中が分かんないときは?

燐華

配列内の個数を数えて中央値を計算するぞい

<?php
$array = explode(" ", trim(fgets(STDIN))); //入力文字を配列に入れる。
$count = count($array); //配列個数を数える
$middle_index = floor($count / 2); //中央値を計算
if($count % != 0){
  //奇数だったら真ん中出力
  echo $array[$middle_index];
} else {
  //偶数だったら真ん中二つを足して2で割る
  $md = ($array[$middle_index - 1] + $array[$middle_index]) / 2;
  echo $md . "\n";
}
?>

  • X